當前位置:
首頁 >
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()输入【已知行数】但【未知每行数字个数】的思路的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: PAT1061 判断题 (15 分)
- 下一篇: C++ 流体效果的实现