编程问题

2024-11-26 15:02:00
推荐回答(2个)
回答1:

将文件内容读出,保存在内存,就可按要求删除某些行,然后再将内容保存到原来的文件。
以下是示例程序:注意修改文件名路径,如果与lz的实际不符。
#pragma warning(disable:4786)
#include
#include
#include
#include
using namespace std;
const char *filename = "pz.csv";
void readFile(vector &vec, ifstream &fin)
{
if(!fin.is_open())
{
cout<<"file not open"< return;
}
char buf[65536];
while(!fin.eof())
{
fin.getline(buf, 65536);
vec.push_back(string(buf));
}
vector(vec).swap(vec);
}
void writeFile(vector &vec, ofstream &fout)
{
vector::iterator it = vec.begin();
while(it != vec.end())
{
fout<<(*it++)< }
vec.clear();
}
void deleteLine(vector &vec)
{
if(vec.size() < 10) return;
for(int i = 0; i<10; ++i) //delete the first 10 lines
{
cout< vec.erase(vec.begin());
}
for(i=0; i<2; ++i)//delete the last 2 lines
{
vector::iterator it = vec.end();
if(it == vec.begin()) break;
--it;
vec.erase(it);
}
}
int main(int argc, char*argv[])
{
vector vec;
ifstream fin;
fin.open(filename);
readFile(vec, fin);
fin.clear();
fin.close();
deleteLine(vec);
ofstream fout(filename);
writeFile(vec, fout);
fout.clear();
fout.close();
return 0;
}

回答2:

你好,我来为你解答:
题目在这里

题目:第三题:街道问题
第三题、设有一个N*M(l<= N<=50, l<= M<= 50)的街道(如图一):(40%)
图一
规定行人从A(1,1)出发,在街道上只能向东或北方向行走。
图二为N=3,M=3的街道图:从A出发到达B共有6条可供行走的路径:
图二
1. A-A1-A2-A5-B
2. A-A1-A4-A5-B
3. A-A1-A4-A7-B
4. A-A3-A4-A5-B
5. A-A3-A4-A7-B
6. A-A3-A6-A7-B
若在N*M的街道中,设置一个矩形障碍区域(包括围住该区域的的街道)不让行人通 行,如图一中用“*”表示的部分。此矩形障碍区域用2对顶点坐标给出,图一中的2对顶点坐标为:(2,2),(8,4),此时从 A出发到达B的路径仅有两条。程序要求:任务一:给出N,M后,求出所有从A出发到达B的路径的条数。
任务二:给出N,M,同时再给出此街道中的矩形障碍区域的2对顶点坐标(X1,y1), (X2,Y2),然后求出此种情况下所有从A出发到达B的路径的条数。
题目:第三题:骑士游历
第三题、骑士游历:设有一个n*m的棋盘(2<=n<=50,2<=m<=50),在棋盘上任一点有一个中国象棋马,马走的规则为:

1.马走日字,从(1,1)可以走到(2,3)和(3,2) 2.马只能向右走
任务1:当N,M 输入之后,找出一条从左下角到右上角的路径。
例如:输入 N=4,M=4 输出:路径的格式:(1,1)->(2,3)->(4,4)若不存在路径,则输出"no"
任务2:当N,M 给出之后,同时给出马起始的位置和终点的位置,试找出从起点到终点的所有路径的数目。
例如:(N=10,M=10),(1,5)(起点),(3,5)(终点) 输出:2(即由(1,5)到(3,5)共有2条路径)
输入格式:n,m,x1,y1,x2,y2(分别表示n,m,起点坐标,终点坐标)
输出格式:路径数目(若不存在从起点到终点的路径,输出0)

题目:第一题:拦截导弹
第一题:拦截导弹(28分)
某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统。但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够达到任意的高度,但是以后每一发炮弹都不能高于前一发炮弹的高度。某天,雷达捕捉到敌国的导弹来袭。由于该系统还在试用阶段,所以只有一套系统,因此不能保证拦截所有的导弹。
输入导弹依次飞来的高度(雷达给出的高度数据是不大于30000的正整数),计算这套系统最多能拦截多少导弹,和如果要拦截所有导弹最少要配备多少套这种导弹拦截系统。
样例: INPUT OUPUT
389 207 155 300 299 170 158 65 6 (最多能拦截的导弹数)
2 (要拦截所有导弹最少要配备的系统数)
题目:第三题:乘积最大
第三题:乘积最大 (26分)
问题描述:
今年是国际数学联盟确定的“2000——世界数学年”,又恰逢我国著名数学家华罗庚先生诞辰90周年。在华罗庚先生的家乡江苏金坛,组织了一场别开生面的数学智力竞赛的活动,你的一个好朋友XZ也有幸得以参加。活动中,主持人给所有参加活动的选手出了这样一道题目:
设有一个长度N的数字串,要求选手使用K个乘号将它分成K+1个部分,找出一种分法,使得这K+1个部分的乘积能够为最大。
同时,为了帮助选手能够正确理解题意,主持人还举了如下的一个例子:
有一个数字串: 312,当N=3,K=1时会有以下两种分法:
1)3*12=36
2)31*2=62
这时,符合题目要求的结果是: 31*2=62
现在,请你帮助你的好朋友XZ设计一个程序,求得正确的答案。
输入:
程序的输入共有两行:
第一行共有2个自然数N,K (6<=N<=40,1<=K<=6)
第二行是一个K度为N的数字串。
输出:
结果显示在屏幕上,相对于输入,应输出所求得的最大乘积(一个自然数)。
样例:
输入
4 2
1231
输出
62

题目:第四题:方格取数
第四题、方格取数 (33分)
问题描述
设有N*N的方格图(N≤8):我们将其中的某些方格中填入正整数,而其他的方格中则放入数字0。如下图所示(见样例):

A
13 6
7
14
21 4
15
14
B
某人从图的左上角的A点出发,可以向下行走,也可以向右走,直到到达右下角的B点。在走过的路上,他可以取走方格中的数(取走后的方格中将变为数字0)。
此人从A点到B点共走两次,试找出2条这样的路径,使得取得的数之和为最大。
输 入
输入的第一行为一个整数N(表示N*N的方格图),接下来的每行有三个整数,前两个表示位置,第三个数为该位置上所放的数。一行单独的0表示输入结束。
输 出
只需输出一个整数,表示2条路径上取得的最大的和。
样 例
输入
8
2 3 13
2 6 6
3 5 7
4 4 14
5 2 2l
5 6 4
6 3 15
7 2 14
0 0 0
输出
67