目前个人小熊猫devc编译器用源码还是有点问题,但抱着试一试的心态贴上来,系统竟然过了,不知道是我编译器问题还是神马。
调了一下午了,没心思继续debug了,反正系统过了,以后再说。
老样子,还是尝试二维数组,题目操作符号直接改成操作数了,这不摆明让用switch case吗?
先上代码,main和头就不粘过来了,,注释符号防和谐就不加了
初学,技术不佳,仅供参考,自己的一些问题也丢在里面了,欢迎帮忙debug(`・ω・´)
int times; 定义行数,也就是之后循环的次数,题设说明。 scanf("%d", ×); 输入行数。 long a[times]; 操作数单独做一个一维数组,注意是long,按理来说就4个操作数,但个人测试上传亲测用int没法过,改成long就成功了。 long b[times][2]; 数据单独做一个二维数组,这个按题目要求,没毛病。
这里单独说明一下为啥操作数和数据分开放,如果建一个大的long a[times][3]来同时存放操作数和数据,上传会报错:
系統呼叫了 abort 函式! *** stack smashing detected ***: terminated Aborted (core dumped)*/
看着好像是性能溢出还是啥,俺也不知道为啥,要有大佬能懂还请帮忙解答 long n; 这边定义一个全局循环变量。 for (n = 1; n <= times; n = n + 1) { 循环输入,没啥可多说的。 scanf("%ld %ld %ld", &a[n], &b[n][1], &b[n][2]); } for (n = 1; n <= times; n = n + 1) { 循环判断+输出 long long int answer = 0; 定义局部输出变量,遵循单出口原则 switch (a[n]) { switch case逻辑判断,遵循单出口原则,只赋值,先不输出 case 1: answer = b[n][1] + b[n][2]; break; case 2: answer = b[n][1] - b[n][2]; break; case 3: answer = b[n][1] * b[n][2]; break; case 4: answer = b[n][1] / b[n][2]; break; } if (n < times) 输出判断是否最后一行,按题目格式要求 printf("%lld\n", answer); else printf("%lld", answer); } return 0;
就这吧,反正按这代码我AC了,自己编译器就连初步样本貌似都没过,但系统就是过了,真是醉了(╬ ̄皿 ̄)
搞了一下午了,没空debug了,要有大佬能搞明白细节,还请帮忙解答(〃'▽'〃)。
(二维数组使用我自己还不太熟悉,mooc才刚刚听到循环初步,指针都没学(T▽T),我自己程序调下来是循环赋值完部分数组变量后,其他已赋值的数组变量会同时变,但我上传就AC了)
(但倘若我自己用a[times][3]来做自己这边能成功,但上传就过不了,醉了(#`皿´))
另外,这数据量能到long long就离谱,可能这就是偏向OI的coding吧ヾ(>Д<;))))..... 逃~~
目前个人小熊猫devc编译器用源码还是有点问题,但抱着试一试的心态贴上来,系统竟然过了,不知道是我编译器问题还是神马。
调了一下午了,没心思继续debug了,反正系统过了,以后再说。
老样子,还是尝试二维数组,题目操作符号直接改成操作数了,这不摆明让用switch case吗?
先上代码,main和头就不粘过来了,,注释符号防和谐就不加了
初学,技术不佳,仅供参考,自己的一些问题也丢在里面了,欢迎帮忙debug(`・ω・´)
int times; 定义行数,也就是之后循环的次数,题设说明。 scanf("%d", ×); 输入行数。 long a[times]; 操作数单独做一个一维数组,注意是long,按理来说就4个操作数,但个人测试上传亲测用int没法过,改成long就成功了。 long b[times][2]; 数据单独做一个二维数组,这个按题目要求,没毛病。
这里单独说明一下为啥操作数和数据分开放,如果建一个大的long a[times][3]来同时存放操作数和数据,上传会报错:
系統呼叫了 abort 函式! *** stack smashing detected ***: terminated Aborted (core dumped)*/
看着好像是性能溢出还是啥,俺也不知道为啥,要有大佬能懂还请帮忙解答 long n; 这边定义一个全局循环变量。 for (n = 1; n <= times; n = n + 1) { 循环输入,没啥可多说的。 scanf("%ld %ld %ld", &a[n], &b[n][1], &b[n][2]); } for (n = 1; n <= times; n = n + 1) { 循环判断+输出 long long int answer = 0; 定义局部输出变量,遵循单出口原则 switch (a[n]) { switch case逻辑判断,遵循单出口原则,只赋值,先不输出 case 1: answer = b[n][1] + b[n][2]; break; case 2: answer = b[n][1] - b[n][2]; break; case 3: answer = b[n][1] * b[n][2]; break; case 4: answer = b[n][1] / b[n][2]; break; } if (n < times) 输出判断是否最后一行,按题目格式要求 printf("%lld\n", answer); else printf("%lld", answer); } return 0;
就这吧,反正按这代码我AC了,自己编译器就连初步样本貌似都没过,但系统就是过了,真是醉了(╬ ̄皿 ̄)
搞了一下午了,没空debug了,要有大佬能搞明白细节,还请帮忙解答(〃'▽'〃)。
(二维数组使用我自己还不太熟悉,mooc才刚刚听到循环初步,指针都没学(T▽T),我自己程序调下来是循环赋值完部分数组变量后,其他已赋值的数组变量会同时变,但我上传就AC了)
(但倘若我自己用a[times][3]来做自己这边能成功,但上传就过不了,醉了(#`皿´))
另外,这数据量能到long long就离谱,可能这就是偏向OI的coding吧ヾ(>Д<;))))..... 逃~~
你好 有想問的可以私我站內信
首先 這題一維陣列便可解決 但需要將數值重新改為零 可查一下memset()的用法
memset() - C語言庫函數 - C語言標準庫 (gitbook.net)
再來 由於數字相加或相乘「有可能」超過int的範圍 因此建議改成 long int or long long int
但是unsigned int ... 可以去了解一下 非常實用 可以不用佔這麼多記憶體空間~
對了 問問題不要用解題報告
用普通的文章發文就好
對了 問問題不要用解題報告
用普通的文章發文就好
谢谢,思路收到了,懂了。
下次不在报告里发求助误人子弟了。。
再次肥肠感谢!