|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
最近在学习循环与二维数组,可能是因为逻辑问题,经常感到头晕,希望大佬们能帮我解决一下,就如下面这道题目。
#2008年北京奥运会,A国的运动员参与了n天的决赛项目(1≤n≤17)。现在要统计一下A国所获得的金、银、铜牌数目及总奖牌数
输入格式
3
1 0 3
3 1 0
0 3 0
输出格式
4 4 3
对于本题我只能有循环能做对,再试着用二维数组和循环时,遇到了困难。
#include <stdlib.h>
int main33()
{
int i,j,a[100][3],n,m;
while(scanf("%d",&n)!=EOF)
{
for(i=0;i<n;i++)
{
for(j=0;j<3;j++)
{
scanf("%d",&a[i][j]);
}
}
for(j=0;j<3;j++)
{
for(i=0;i<n;i++)
{
a[n][j]+=a[i][j];
a[n][3]+=a[n][j];
}
}
printf("%d %d\n",a[n][j],a[n][3]);
}
return 0;
}
我的天那……我要炸裂了。其实你上一个程序还可以,现在这个真的……
1. 初始化a[18][3],只要写一个值就好了,剩余的会自动补全为0,当然你这么写也没错。
2. 输入每一行的数据的时候,接收数据的居然是a[j]?二维数组就变成了一维???
3. 相加的那一块for循环里,我就看不懂了。为什么有一个一维数组,为什么定义了外循环 i 但是没用上?还有就是内循环的判断条件为什么是i<3?肯定是写错了吧
4. 最后打印的a[n][3]是什么?总共的下标是0、1、2就这三列,不存在3这个下标呀,你这么写就超列的范围了!你的意思是不是要说总共的牌有几块是吧?那你就用个变量存一下!别放在数组了。
还是我给你个代码吧,就按照你写的改,你自己感觉下:
- #include <stdio.h>
- #include <stdlib.h>
- int main()
- {
- int i, j, n, count = 0;
- int a[18][3] = {0};
-
- scanf("%d",&n);
- if(n>=1 && n<18)
- {
- for(i=0; i<n; i++)
- {
- for(j=0; j<3; j++)
- {
- scanf("%d",&a[i][j]); // 这里写全,哪行哪列!
- }
- }
- for(i=0; i<n; i++)
- {
- for(j=0; j<3; j++)
- {
- a[n][i]+=a[j][i];
- }
- count+=a[n][i]; // 放循环外,为什么?因为统计完那一列的全部才算得到这种牌的总数
- }
- printf("%d %d %d\n",a[n][0],a[n][1],a[n][2]);
- printf("一共是 %d 个\n", count);
- }
- return 0;
- }
复制代码
|
|