关于c语言的循环与二维数组问题
最近在学习循环与二维数组,可能是因为逻辑问题,经常感到头晕,希望大佬们能帮我解决一下,就如下面这道题目。#2008年北京奥运会,A国的运动员参与了n天的决赛项目(1≤n≤17)。现在要统计一下A国所获得的金、银、铜牌数目及总奖牌数
输入格式
3
1 0 3
3 1 0
0 3 0
输出格式
443
对于本题我只能有循环能做对,再试着用二维数组和循环时,遇到了困难。
#include <stdlib.h>
int main33()
{
int i,j,a,n,m;
while(scanf("%d",&n)!=EOF)
{
for(i=0;i<n;i++)
{
for(j=0;j<3;j++)
{
scanf("%d",&a);
}
}
for(j=0;j<3;j++)
{
for(i=0;i<n;i++)
{
a+=a;
a+=a;
}
}
printf("%d %d\n",a,a);
}
return 0;
}
你需要用动态内存分配来实现手动输入行数n的情况
否则不能直接用a的形式 BngThea 发表于 2017-10-28 10:40
你需要用动态内存分配来实现手动输入行数n的情况
否则不能直接用a的形式
额..我不太懂,能说的再详细一点吗 你学了molloc 和 free 函数了吗?
因为需要动态分配内存的话是需要这些知识的。
如果没有,那么请用4代替你代码中的n,这样应该就可以了 BngThea 发表于 2017-10-28 11:03
你学了molloc 和 free 函数了吗?
因为需要动态分配内存的话是需要这些知识的。
如果没有,那么请用4代替 ...
还没有,目前只学到了字符数组,我给同学看,同学说应该不能用二维数组,否则要在定义一个变量,输出J,这样就不符合输入格式了 BngThea 发表于 2017-10-28 11:03
你学了molloc 和 free 函数了吗?
因为需要动态分配内存的话是需要这些知识的。
如果没有,那么请用4代替 ...
用4代替n,也不符合输入格式
说几点:
先不说你的程序能不能运行,就说你的格式语法的问题。 main函数后面最好别加33什么的;你题目值的n最大是17,你就定义一个18行,第18行保存金银铜的总数就行,别定义这么多,浪费不说,程序执行会效率会慢一点,当然你是感觉不出来的;不用while,你只是输入一个n,完全可以用if判断,然后让程序运行完正常结束;最后打印结果,你只写了两列数据,并且你用了j,j继承for的++已经超出范围。
程序的修改:
你没初始化数组,a = {0},这样就可以了,然后把最后的打印语句改了printf("%d %d %d\n",a,a,a); 别的不改也行,程序也可以,但是看去逻辑上很便扭 丶忘却的年少o 发表于 2017-10-28 12:18
说几点:
先不说你的程序能不能运行,就说你的格式语法的问题。 main函数后面最好别加33什么的;你题目值 ...
#include <stdio.h>
#include <stdlib.h>
int main()
{
int i,j,a={{0},{0}},n;
scanf("%d",&n);
if(n>=1&&n<18)
{
for(i=0;i<n;i++)
{
for(j=0;j<3;j++)
{
scanf("%d",&a);
}
}
for(i=0;i<n;i++)
{
for(j=0;i<3;j++)
{
a+=a;
a+=a;
}
printf("%d %d %d %d",a,a,a,a);
}
}
return 0;
}
这样呢,改了以后能运行,但是没有输出就报错了
ss4415 发表于 2017-10-28 14:31
#include
#include
int main()
我的天那……我要炸裂了。其实你上一个程序还可以,现在这个真的……
1. 初始化a,只要写一个值就好了,剩余的会自动补全为0,当然你这么写也没错。
2. 输入每一行的数据的时候,接收数据的居然是a?二维数组就变成了一维???
3. 相加的那一块for循环里,我就看不懂了。为什么有一个一维数组,为什么定义了外循环 i 但是没用上?还有就是内循环的判断条件为什么是i<3?肯定是写错了吧
4. 最后打印的a是什么?总共的下标是0、1、2就这三列,不存在3这个下标呀,你这么写就超列的范围了!你的意思是不是要说总共的牌有几块是吧?那你就用个变量存一下!别放在数组了。
还是我给你个代码吧,就按照你写的改,你自己感觉下:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int i, j, n, count = 0;
int a = {0};
scanf("%d",&n);
if(n>=1 && n<18)
{
for(i=0; i<n; i++)
{
for(j=0; j<3; j++)
{
scanf("%d",&a); // 这里写全,哪行哪列!
}
}
for(i=0; i<n; i++)
{
for(j=0; j<3; j++)
{
a+=a;
}
count+=a; // 放循环外,为什么?因为统计完那一列的全部才算得到这种牌的总数
}
printf("%d %d %d\n",a,a,a);
printf("一共是 %d 个\n", count);
}
return 0;
} 丶忘却的年少o 发表于 2017-10-28 14:54
我的天那……我要炸裂了。其实你上一个程序还可以,现在这个真的……
1. 初始化a,只要写一个值 ...
谢谢!
页:
[1]