今天起晚了,八點多起的,所以心情不是很好,感覺時間白浪費了。
今天又因為一點小失誤,造成我在編程題目上白白浪費幾個小時。
趁我還很有感觸,趕緊寫下來。
ps,今天題目還是散列,仍舊很簡單,我不進行代碼解釋了,因為還有抽出時間復習其他科目。
B1038
1038 統(tǒng)計同成績學生 (20分)
本題要求讀入 N 名學生的成績,將獲得某一給定分數(shù)的學生人數(shù)輸出。
輸入格式:
輸入在第 1 行給出不超過 10
?5
?? 的正整數(shù) N,即學生總?cè)藬?shù)。隨后一行給出 N 名學生的百分制整數(shù)成績,中間以空格分隔。最后一行給出要查詢的分數(shù)個數(shù) K(不超過 N 的正整數(shù)),隨后是 K 個分數(shù),中間以空格分隔。
輸出格式:
在一行中按查詢順序給出得分等于指定分數(shù)的學生人數(shù),中間以空格分隔,但行末不得有多余空格。
輸入樣例:
10
60 75 90 55 75 99 82 90 75 50
3 75 90 88
輸出樣例:
3 2 0
這個題目經(jīng)典送分,可以一遍過的
#include <cstdio>
using namespace std;
int totalStudent;
int personalScore;
int queryNumber;
int question;
int scores[101] = {0};
int main()
{
scanf("%d", &totalStudent);
for (int i = 0; i < totalStudent; i++)
{
scanf("%d", &personalScore);
scores[personalScore]++;
}
//讀入數(shù)據(jù),述標初始化完畢
//讀入查詢
scanf("%d", &queryNumber);
for (int i = 0; i < queryNumber; i++)
{
scanf("%d", &question);
if (i==0)
{
printf("%d", scores[question]);
}
else
{
printf(" %d", scores[question]);
}
}
return 0;
}
不講了,省省時間。下面看看我是怎么錯的1039的吧

B1039
錯誤非常不應該,我遇到問題之后就努力進行錯誤排查,從思路上,從代碼拼寫上,以及從空間時間上都進行了考慮,并且做了N次對照試驗(把一些代碼注釋替換,并提交,從而尋找問題),都沒能成功。
很懊喪,
然后我就先睡一會,睡之前我把代碼發(fā)給自己的qq,可以醒來翻看
睡的時候,我腦子仍然在動畫演示流程,想想到底是哪里出了錯誤
沒想出來
醒來之后,翻看qq上的代碼
一看,發(fā)現(xiàn)....
(下面是正確的代碼)
#include <cstdio>
#include <string>
#include <cstring>
#include <iostream>
/*
就今天我要弄清楚cstring和string的區(qū)別
*/
/*
分清楚hashTable申請的字節(jié)空間1024和hashTable本身int的大小256
*/
using namespace std;
int hashTable[256] = {0};
string forSale;
string wannaMake;
int main()
{
// freopen("write.in","r",stdin);
// freopen("ans.out","w",stdout);
// while (getline(cin, forSale))
getline(cin, forSale);
getline(cin, wannaMake);
for (int i = 0; i < forSale.length(); i++)
{
hashTable[forSale[i]]++;
}
for (int i = 0; i < wannaMake.length(); i++)
{
hashTable[wannaMake[i]]--;
}
bool flag = true;
for (int i = 0; i < 256; i++)
{
if (hashTable[i] < 0)
{
flag = false;
break;
}
}
if (flag == true)
{
printf("Yes ");
int sum=0;//sum記錄多余的
for (int i = 0; i < 256; i++)
{
sum += hashTable[i];
}
printf("%d", sum);
}
else
{
printf("No ");
int sum=0;//sum記錄缺少的
for (int i = 0; i < 256; i++)
{
if (hashTable[i] < 0)
{
sum += hashTable[i];
}
}
printf("%d", -sum);
}
// cout<<endl;
// fclose(stdin);
// fclose(stdout);
return 0;
}


只是因為這兩處sum忘記初始化成0了
著實浪費感情
一朝被蛇咬,十年怕草繩
以后這種錯誤我會堅決避免的
最后,補上一個知識點
課代表??
#include <cstring> //不可以定義string s;可以用到strcpy等函數(shù)
using namespace std;
#include <string> //可以定義string s;可以用到strcpy等函數(shù)
using namesapce std;
#include <string.h> //不可以定義string s;可以用到strcpy等函數(shù)
我以前一直是抱著以防萬一的心態(tài),把string和cstring都包含進來的
但其實
簡單總結(jié)一下,以后直接包含進來string頭文件就可以了
1)文件cstring,和string.h對應,c++版本的頭文件,包含比如strcpy之類的字符串處理函數(shù)
2)文件string.h,和cstring對應,c版本的頭文件,包含比如strcpy之類的字符串處理函數(shù)
3)文件string,包含std::string的定義,屬于STL范疇
4)CString,MFC里的的字符串類
行了,今天到這,光速更新我是萬萬沒想到的
可能這就是高產(chǎn)吧
Chant
886~~