一道C语言题目
在某次实弹射击训练中,班长将十个战士围成一圈发子弹。按如下方法将每个战士手中的子弹进行调整:所有的战士检查自己手中的子弹数,如果子弹数为奇数,则向班长再要一颗。然后每个战...
在某次实弹射击训练中,班长将十个战士围成一圈发子弹。按如下方法将每个战士手中的子弹进行调整:所有的战士检查自己手中的子弹数,如果子弹数为奇数,则向班长再要一颗。然后每个战士再同时将自己手中的子弹分一半给下一个战士(第10 个战士将手中的子弹分一半给第1个战士)。问需要多少次调整后,每个战士手中的子弹数都相等?每人各有多少颗子弹?
要求输出每轮调整后各战士手中的子弹数。
要求结果的输出格式为
0 10 2 8 22 16 4 10 6 14 20 各战士手中原始的子弹数
1 xx xx xx xx xx xx xx xx xx xx 第1轮各战士手中的子弹数
2 xx xx xx xx xx xx xx xx xx xx 第2轮各战士手中的子弹数
……
n xx xx xx xx xx xx xx xx xx xx 最后一轮各战士手中的子弹数(应相等)
看一下我写的程序哪错了?
#include<stdio.h>
main()
{
FILE *fin,*fout;
fin=fopen("1.in","r");
fout=fopen("1.out","w");
int a[10],i,o,end;
for(i=0;i<10;i++)
fscanf(fin,"%d",&a[i]);
for(i=0;i<10;i++)
{
fprintf(fout,"%d ",a[i]);
if(i==9)
fprintf(fout,"\n");
}
for(i=0;i<10;i++)
{
if(a[i]%2==1)
a[i]++;
}
for(i=0;i<10;i++)
{
fprintf(fout,"%d ",a[i]);
if(i==9)
fprintf(fout,"\n");
}
loop:for(i=0;i<9;i++)
{
o=(a[i]/2);
a[i]/=2;
a[i+1]=a[i+1]+o;
if(a[i]%2==1)
a[i]++;
o=0;
}
end=(a[9]/2);
a[9]/=2;
a[1]+=end;
if(a[9]%2==1)
a[9]++;
for(i=0;i<10;i++)
{
fprintf(fout,"%d ",a[i]);
if(i==9)
fprintf(fout,"\n");
}
for(i=0;i<9;i++)
if(a[i]!=a[i+1])
{
goto loop;
break;
}
for(i=0;i<10;i++)
fprintf(fout,"%d",a[i]);
fclose(fin);
fclose(fout);
} 展开
要求输出每轮调整后各战士手中的子弹数。
要求结果的输出格式为
0 10 2 8 22 16 4 10 6 14 20 各战士手中原始的子弹数
1 xx xx xx xx xx xx xx xx xx xx 第1轮各战士手中的子弹数
2 xx xx xx xx xx xx xx xx xx xx 第2轮各战士手中的子弹数
……
n xx xx xx xx xx xx xx xx xx xx 最后一轮各战士手中的子弹数(应相等)
看一下我写的程序哪错了?
#include<stdio.h>
main()
{
FILE *fin,*fout;
fin=fopen("1.in","r");
fout=fopen("1.out","w");
int a[10],i,o,end;
for(i=0;i<10;i++)
fscanf(fin,"%d",&a[i]);
for(i=0;i<10;i++)
{
fprintf(fout,"%d ",a[i]);
if(i==9)
fprintf(fout,"\n");
}
for(i=0;i<10;i++)
{
if(a[i]%2==1)
a[i]++;
}
for(i=0;i<10;i++)
{
fprintf(fout,"%d ",a[i]);
if(i==9)
fprintf(fout,"\n");
}
loop:for(i=0;i<9;i++)
{
o=(a[i]/2);
a[i]/=2;
a[i+1]=a[i+1]+o;
if(a[i]%2==1)
a[i]++;
o=0;
}
end=(a[9]/2);
a[9]/=2;
a[1]+=end;
if(a[9]%2==1)
a[9]++;
for(i=0;i<10;i++)
{
fprintf(fout,"%d ",a[i]);
if(i==9)
fprintf(fout,"\n");
}
for(i=0;i<9;i++)
if(a[i]!=a[i+1])
{
goto loop;
break;
}
for(i=0;i<10;i++)
fprintf(fout,"%d",a[i]);
fclose(fin);
fclose(fout);
} 展开
2个回答
展开全部
不好意思,你的程序结构太乱了,我给你改了一下:
#include<stdio.h>
FILE *fin,*fout;
//输出到文件
void OutputFile(int a[], int count)
{
fprintf(fout,"%2d: ", count);
for(int i = 0; i < 10; i++)
{
fprintf(fout, "%d \t", a[i]);
}
fprintf(fout,"\n");
}
//判断每个战士手中的子弹是否相等
bool Equal(int a[])
{
int t = a[0];
for (int i = 1; i < 10; i ++)
{
if (a[i] != t) return false;
}
return true;
}
void main()
{
fin=fopen("1.in", "r");
fout=fopen("1.out", "w");
int a[10], i;
int o[10]; //保存战士一半的字弹数
int count = 0; //统计圈数
//扫描原始数据
for(i = 0; i < 10; i++)
fscanf(fin, "%d", &a[i]);
//初始化
for(i = 0; i < 10; i++)
o[i] = 0;
//打印原始子弹数
OutputFile(a, count);
//当手中的子弹书不相等继续循环
while(!Equal(a))
{
//如果战士手中子弹为奇数,则向班长要一颗
for( i = 0; i < 10; i++)
{
if(a[i] % 2 == 1) a[i]++;
}
//每个战士减一半
for (i = 0; i < 10; i++)
{
o[i] = (a[i] /= 2);
}
//给下一个战士
for (i = 0; i < 10; i++)
{
a[(i + 1) % 10] += o[i];
}
//输出结果
OutputFile(a, count++);
}
printf("OK\n");
getchar();
fclose(fin);
fclose(fout);
}
输出结果为:
0: 10 2 8 22 16 4 10 6 14 20
0: 15 6 5 15 19 10 7 8 10 17
1: 17 11 6 11 18 15 9 8 9 14
2: 16 15 9 9 15 17 13 9 9 12
3: 14 16 13 10 13 17 16 12 10 11
4: 13 15 15 12 12 16 17 14 11 11
5: 13 15 16 14 12 14 17 16 13 12
6: 13 15 16 15 13 13 16 17 15 13
7: 14 15 16 16 15 14 15 17 17 15
8: 15 15 16 16 16 15 15 17 18 17
9: 17 16 16 16 16 16 16 17 18 18
10: 18 17 16 16 16 16 16 17 18 18
11: 18 18 17 16 16 16 16 17 18 18
12: 18 18 18 17 16 16 16 17 18 18
13: 18 18 18 18 17 16 16 17 18 18
14: 18 18 18 18 18 17 16 17 18 18
15: 18 18 18 18 18 18 17 17 18 18
16: 18 18 18 18 18 18 18 18 18 18
#include<stdio.h>
FILE *fin,*fout;
//输出到文件
void OutputFile(int a[], int count)
{
fprintf(fout,"%2d: ", count);
for(int i = 0; i < 10; i++)
{
fprintf(fout, "%d \t", a[i]);
}
fprintf(fout,"\n");
}
//判断每个战士手中的子弹是否相等
bool Equal(int a[])
{
int t = a[0];
for (int i = 1; i < 10; i ++)
{
if (a[i] != t) return false;
}
return true;
}
void main()
{
fin=fopen("1.in", "r");
fout=fopen("1.out", "w");
int a[10], i;
int o[10]; //保存战士一半的字弹数
int count = 0; //统计圈数
//扫描原始数据
for(i = 0; i < 10; i++)
fscanf(fin, "%d", &a[i]);
//初始化
for(i = 0; i < 10; i++)
o[i] = 0;
//打印原始子弹数
OutputFile(a, count);
//当手中的子弹书不相等继续循环
while(!Equal(a))
{
//如果战士手中子弹为奇数,则向班长要一颗
for( i = 0; i < 10; i++)
{
if(a[i] % 2 == 1) a[i]++;
}
//每个战士减一半
for (i = 0; i < 10; i++)
{
o[i] = (a[i] /= 2);
}
//给下一个战士
for (i = 0; i < 10; i++)
{
a[(i + 1) % 10] += o[i];
}
//输出结果
OutputFile(a, count++);
}
printf("OK\n");
getchar();
fclose(fin);
fclose(fout);
}
输出结果为:
0: 10 2 8 22 16 4 10 6 14 20
0: 15 6 5 15 19 10 7 8 10 17
1: 17 11 6 11 18 15 9 8 9 14
2: 16 15 9 9 15 17 13 9 9 12
3: 14 16 13 10 13 17 16 12 10 11
4: 13 15 15 12 12 16 17 14 11 11
5: 13 15 16 14 12 14 17 16 13 12
6: 13 15 16 15 13 13 16 17 15 13
7: 14 15 16 16 15 14 15 17 17 15
8: 15 15 16 16 16 15 15 17 18 17
9: 17 16 16 16 16 16 16 17 18 18
10: 18 17 16 16 16 16 16 17 18 18
11: 18 18 17 16 16 16 16 17 18 18
12: 18 18 18 17 16 16 16 17 18 18
13: 18 18 18 18 17 16 16 17 18 18
14: 18 18 18 18 18 17 16 17 18 18
15: 18 18 18 18 18 18 17 17 18 18
16: 18 18 18 18 18 18 18 18 18 18
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |