日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > c/c++ >内容正文

c/c++

C++ cin.putback()输入【已知行数】但【未知每行数字个数】的思路

發(fā)布時(shí)間:2024/2/28 c/c++ 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。