題目鏈接:http://acm.hdu.edu.cn/showproblem.php?pid=2008
一開始錯(cuò)誤代碼:
問題及修改:
1.最開始的時(shí)候就犯了一個(gè)很低級(jí)的錯(cuò)誤,想要運(yùn)用雙層循環(huán)孙蒙,卻又將循環(huán)變量定義為同 ? ? 一個(gè)量项棠,但其實(shí)這道題不需要用到雙層循環(huán),因此就是要把內(nèi)循環(huán)給刪掉挎峦;
2.對(duì)輸入數(shù)據(jù)的定義錯(cuò)誤沾乘,沒看清楚題目要求,誤定義為int型浑测,應(yīng)該要改為float型翅阵;
3.對(duì)計(jì)數(shù)的定義問題,==與=的區(qū)別迁央;還有逗號(hào)運(yùn)算符的用法掷匠。
如果只是修改了1、2岖圈,而沒有修改3讹语,則代碼會(huì)出現(xiàn)以下結(jié)果:
全修改后的正確代碼:
#include "stdio.h"void main()
{? ? int m,i,count1,count2,count3;? ? float a[100];? ? while(scanf("%d",&m)!=EOF)
? ? {? ? ? ? count1=0;count2=0;count3=0;? ? ? ? if(m==0||m>=100) break;? ? ? ? for(i=0;i<m;i++)
? ? ? ? ? {scanf("%f",&a[i]);? ? ? ? ? ? ? if (a[i]==0)
? ? ? ? ? ? {? ? ? ? ? ? ? ? count1++;
? ? ? ? ? ? }?
? ? ? ? ? ? else if (a[i]>0)
? ? ? ? ? ? {? ? ? ? ? ? ? ? count2++;
? ? ? ? ? ? }? ? ? ? ? ? ? else if (a[i]<0)
? ? ? ? ? ? ? {? ? ? ? ? ? ? ? count3++;
? ? ? ? ? ? ? }
? ? ? ? ? }? ? ? ? printf("%d %d %d\n",count3,count1,count2);
? ? }
}
筆記:要去理解雙層循環(huán)的用法;要熟悉基本運(yùn)算符的用法以及格式的規(guī)范性蜂科。
題目鏈接:http://acm.hdu.edu.cn/showproblem.php?pid=2009
這個(gè)題目不難顽决,但是在做的過程中遇到了一個(gè)很碰巧的現(xiàn)象
答案大了是因?yàn)槲腋拇a的時(shí)候把外面的賦值了,卻忘記把里面的循環(huán)減一了导匣,除掉這個(gè)來說答案可以說是正確的
但是2挪ぁ!這個(gè)答案是碰巧對(duì)的贡定,因?yàn)槲业拇a那里定義成了int型赋访,輸入其他的數(shù)據(jù)其實(shí)就是錯(cuò)誤的答案,那這個(gè)碰巧在哪里呢缓待,我的個(gè)人是覺得就在于81的每次平方根后都是整數(shù)蚓耽,在詢問組長之后得到較為官方的解釋就是n最后參與計(jì)算的數(shù)值是3,sqrt(3)會(huì)自動(dòng)轉(zhuǎn)化為double型,所以對(duì)計(jì)算結(jié)果沒有影響旋炒。
sqrt是一個(gè)包含在math里面的函數(shù)步悠,他的返回值是double型。雖然他引用的參數(shù)不一定是doule型瘫镇,但是并不會(huì)影響他的返回值類型
小結(jié):經(jīng)常做題除了在大一些的方面會(huì)出問題鼎兽,小問題也是經(jīng)常出芹壕,所以我需要強(qiáng)化基礎(chǔ)? 知識(shí),上面一個(gè)簡(jiǎn)單的題目出了小問題也能牽扯出一些知識(shí)接奈,雖然不太理解踢涌,但是先記住也是好的。