關於連續輸入多組資料的淺談
阿新 • • 發佈:2018-12-12
這裡是本鹹魚的第一篇部落格,由於被一道水題給搞的要死要活的,心態爆炸,於是去問了下大佬鼠,然後知道了不少東西,在這裡記錄一下,先粘下這個水題
再粘上鹹魚我的錯誤程式碼
#include<bits/stdc++.h>
using namespace std;
int main()
{
int a[100],sum=0,t=0,p;
while(1){
cin>>a[0];
while(a[t]!=0){
p=0;
for(int i=0;i<t;i++)
if(a[t]==a[i])
p=1;
if(p!=1)
sum++ ;
t++;
cin>>a[t];
}
if(sum>=12)
cout<<"yes"<<endl;
else
cout<<"no"<<endl;
if(a[0]==0)
break;
t=0;
sum=0;
}
}
大佬告訴我我的程式碼輸出超限了
因為交題預設多組輸入是有限行,而我的則是可以輸入無限行,所以出現了這個結果
再再粘上大佬的程式碼
#include<bits/stdc++.h>
using namespace std;
int bk[12222 ];
int sum=0;
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
f1:
int f=0;
sum=0;
memset(bk,0,sizeof(bk));
int n;
while(cin>>n){
f=1;
if(n==0)
break;
if(bk[n]==0){
bk[n]=1;
sum++;
}
}
if(f==0)
return 0;
if(sum>=12)
cout<<"yes"<< endl;
else
cout<<"no"<<endl;
goto f1;
}
這裡他用了一個平時不讓用的goto語句來判斷,如果能輸入就繼續執行,
如果輸入的不是int型別的n就 return 0 來結束程式
這裡的while語句判斷需要注意
while(cin>>n){
f=1;
if(n==0)
break;
if(bk[n]==0){
bk[n]=1;
sum++;
}
我一開始以為是cin >>n!=0是判斷條件,但其實是通過輸入的n的型別來判斷的,如果輸入的n是int型別,進行while迴圈(輸入0也進行迴圈),不然就不進行while迴圈,然後藉助開關f來判斷最後是輸出結果還是 return 0
題外話:
以前光想著多學點騷東西,但這種基礎的東西卻沒學好,以後還是得多注意一下格式,省的老WA搞得心態爆炸
最後大佬還跟我說了一些考題會考結束格式的,例如不知道輸入多少行,其他各行之間都有回車但最後一行沒有回車之類的,這些等我見到再說吧