C语言的一道简单题目,要求手动计算。求详解。答案为416.

#include <stdio.h>

int main()
{
int a[3],b[3];
int i,j,tmp;
for (i=0;i<3;i++)
scanf("%d",&b[i]);
for (i=0;i<3;i++)
{
a[i]=0;
for (j=0;j<=i;j++)
{
a[i]+=b[j];
b[a[i]%3]+=a[j];
}
}
tmp=1;
for (i=0;i<3;i++)
{
a[i]%=10;
b[i]%=10;
tmp*=a[i]+b[i];
}
printf("%d\n",tmp);
return 0;
}
2 3 5

第1个回答  2011-09-30
输入?
你要是想偷懒直接在每个for中直接输出变量就能直接看到。
单步调试更好
a[0]=2 a[0]=2
a[0]=2 a[0]=2
a[1]=2 a[0]=2
a[1]=2 a[0]=2
a[1]=5 a[1]=3
a[1]=5 a[1]=3
a[2]=2 a[0]=2
a[2]=2 a[0]=2
a[2]=5 a[1]=3
a[2]=5 a[1]=3
a[2]=26 a[2]=21
a[2]=26 a[2]=47
a[0]=2 a[3]=-858993460
tmp=4
a[1]=5 a[3]=-858993460
tmp=32
a[2]=6 a[3]=-858993460
tmp=416
416追问

不好意思 ,忘了给输入了。

追答

不过别人说的也有道理题目要自己做。
至于你说的技巧,那是程序的熟练度,调试多了就会了

追问

手动(不是用计算机)啊 大哥,难道没人看的懂我的问题吗?

追答

~~~~~~~~~~~~~~动手也是这个结果,平常多调试,考试笔算才出的来,当年俺c语言98秒过

追问

能给个联系方式吗?

追答

刚刚黏错了
a[0]=2 b[0]=2
a[0]=2 b[2]=7
a[1]=2 b[0]=2
a[0]=2 b[2]=9
a[1]=5 b[1]=3
a[1]=5 b[2]=14
a[2]=2 b[0]=2
a[0]=2 b[2]=16
a[2]=5 b[1]=3
a[1]=5 b[2]=21
a[2]=26 b[2]=21
a[2]=26 b[2]=47

a[0]=2 b[0]=2
a[1]=5 b[1]=3
a[2]=26 b[2]=47
a[0]=2 b[0]=2
tmp=4
a[1]=5 b[1]=3
tmp=32
a[2]=6 b[2]=7
tmp=416
我常在的

第2个回答  2011-09-30
这种程序都不懂,也不自己花时间去看,也不知道你学这C有什么用???追问

有种你自己计一次

追答

呵呵,你是学生吧,没猜错的话刚上大一

追问

不帮忙就别废话,别倚老卖老。

第3个回答  2011-09-30
首先要把题目看明白. 第一行的输入是指要输入a和b的对数,从第二行开始,我用C语言写的一个 #include追问

C我会用,这些不用解析。关键是有没有技巧

第4个回答  2011-09-30
大哥,b[i]数组是你自己手动输入的吧,那你的结果应该跟你的输入有关系吧?怎么可能就是答案固定呢? 除非这个跟b[i]数组无关。
自己在第二个for里面,加printf,把每次的tmp输出来你就看出来了啊。追问

输入2 3 5 我已经在上面补充了

追答

底下一个for循环可以看出,a[i],b[i]里,只要都小于等于10的,就不会对tmp起作用,因为对10取余以后为0,乘积为0,就只要考虑a[i]和b[i]里至少有一个大于10的数就可以了。
上面的循环,看起来式子比较复杂,不过也就3*3,9次循环,一个一个推导,应该可以得到结果的啊

追问

你错了,小于10的数除以10是余它本身。

追答

汗,那你自己算吧~~ 放假快乐!

追问

你也快乐。咋像发帖了。- -||

第5个回答  2011-09-30
这东西本应让计算机算的,人算。。。
我错了。。。追问

noip听过吧,堪称非人哉。

追答

你是在搞 acm 么?
其实我觉得还是把中间数据全部输出到一个文件,自己再看着程序走一遍结果,就能够比较容易理解了。
前人的脚印堪称后人的捷径,但巨人的肩膀也仅仅是个平台,走到高处就靠以前积累的经验来自创武功了。

刚搜了noip看一眼,还不算是acm,不过一般搞的好的到大学应该会走acm吧。

追问

noip初赛只有笔试题,高一没考过noip所以没经验,现在临时抱佛脚。听了大家的回答我也明白了,这道题只能是蛮力解决了,noip中有时会有这种无聊的题目出现。
辛苦大家了。

相似回答
大家正在搜