C++ cin.putback()输入【已知行数】但【未知每行数字个数】的思路
生活随笔
收集整理的這篇文章主要介紹了
C++ cin.putback()输入【已知行数】但【未知每行数字个数】的思路
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
PAT沒(méi)有好好讀題,把這題做麻煩了,這個(gè)思路有兩個(gè)測(cè)試點(diǎn)沒(méi)有通過(guò),因?yàn)榘褦?shù)據(jù)的含義弄錯(cuò)了唄,肯定不能全對(duì)啊,但是用錯(cuò)誤的數(shù)據(jù)能通過(guò)這么多測(cè)試點(diǎn),也是讓我很吃驚。
雖然題做錯(cuò)了,但是想出并實(shí)現(xiàn)了一個(gè)有用的思路:
讀取已知行數(shù)但未知每行數(shù)字個(gè)數(shù)的思路及實(shí)現(xiàn)
讀取一個(gè)字符,如果是回車或者空格,就吞掉,并且進(jìn)行該有的操作
如果是數(shù)據(jù)的一部分,就吐出來(lái)放回緩沖區(qū),用cin正常讀取
以下為主要思路代碼,注意cin.putback()的巧妙使用
while (c = getchar()) //先讓c把這個(gè)字符吃掉{if (c == ' '); //如果是空格,就真的吃掉了else if (c == '\n') //如果是回車,就把總數(shù)存起來(lái),然后把總數(shù)歸零,準(zhǔn)備讀取下一行{room[i].days = curDay;curDay = 0;i++;break;}else //如果不是空格也不是回車,說(shuō)明是有用數(shù)據(jù),把這個(gè)數(shù)據(jù)放回緩沖區(qū),然后用cin讀取這個(gè)數(shù)據(jù),(cin默認(rèn)把空格或者回車作為數(shù)據(jù)結(jié)束的標(biāo)志){cin.putback(c);cin >> room[i].power[curDay];curDay++;}}全部代碼
#include<iostream> using namespace std; class Room { public:double power[1000] = { 0 };double days = 0;int freeDays=0;bool mayFreeRoom = false;bool freeRoom = false; }; int main() {double totalRoom;double minPower;double minDay;cin >> totalRoom >> minPower >> minDay;Room room[1000];int i;int curDay = 0;char c;getchar();//吸收回車//輸入一行未知數(shù)字個(gè)數(shù),但是以\n結(jié)尾的數(shù)據(jù)for (i = 0; i < totalRoom;){while (c = getchar()){if (c == ' ');else if (c == '\n'){room[i].days = curDay;curDay = 0;i++;break;}else{cin.putback(c);cin >> room[i].power[curDay];curDay++;}}}//判斷int j;bool mayFree[1000] = { false };for (i = 0; i < totalRoom; i++){for (j = 1; j < room[i].days; j++){if (room[i].power[j] < minPower){room[i].freeDays++;}}if (room[i].freeDays*2 >= room[i].days)//可能空閑{if (room[i].freeDays > minDay)//空閑{room[i].freeRoom = true;}else room[i].mayFreeRoom = true;}}//計(jì)算double totalMayFree=0;double totalFree=0;for (i = 0; i < totalRoom; i++){if (room[i].mayFreeRoom == true){totalMayFree++;}if (room[i].freeRoom == true){totalFree++;}}printf("%.1f%% %.1f%%", 100*totalMayFree / totalRoom, 100*totalFree / totalRoom);cout << endl;system("pause"); }總結(jié)
以上是生活随笔為你收集整理的C++ cin.putback()输入【已知行数】但【未知每行数字个数】的思路的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: PAT1061 判断题 (15 分)
- 下一篇: C++ 流体效果的实现