日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

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

發布時間:2024/2/28 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C++ cin.putback()输入【已知行数】但【未知每行数字个数】的思路 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

PAT沒有好好讀題,把這題做麻煩了,這個思路有兩個測試點沒有通過,因為把數據的含義弄錯了唄,肯定不能全對啊,但是用錯誤的數據能通過這么多測試點,也是讓我很吃驚。

雖然題做錯了,但是想出并實現了一個有用的思路:

讀取已知行數但未知每行數字個數的思路及實現

讀取一個字符,如果是回車或者空格,就吞掉,并且進行該有的操作

如果是數據的一部分,就吐出來放回緩沖區,用cin正常讀取

以下為主要思路代碼,注意cin.putback()的巧妙使用

while (c = getchar()) //先讓c把這個字符吃掉{if (c == ' '); //如果是空格,就真的吃掉了else if (c == '\n') //如果是回車,就把總數存起來,然后把總數歸零,準備讀取下一行{room[i].days = curDay;curDay = 0;i++;break;}else //如果不是空格也不是回車,說明是有用數據,把這個數據放回緩沖區,然后用cin讀取這個數據,(cin默認把空格或者回車作為數據結束的標志){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();//吸收回車//輸入一行未知數字個數,但是以\n結尾的數據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;}}//計算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"); }

總結

以上是生活随笔為你收集整理的C++ cin.putback()输入【已知行数】但【未知每行数字个数】的思路的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。