超時QAQ
希望能提供想法
下面還有2個問題
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
char input[10000][31]={'\0'};
double grade[10000]={1};
double total=0;
double min;
char test[31];
char ch;
int i,k,j,s,figure=0;
scanf("%d\n",&figure);
for(s=0;s<figure;s++)
{
for(i=0;i<10000;i++)
{
grade[i] = 1;
}
//問題1:
for(i=0;gets(input[i])!=0;i++) //能不能gets(input[i]!=0) 或gets(input[i]!=NULL)取代EOF
{ //網路上有人說可以有人說不行(快搞混了QAQ
for(j=0;j<i;j++) //問題2:
{ //while(scanf("%[^\n]",input[i++])!=EOF)
if(strcmp(input[i],input[j])==0) //有其他版本這樣寫(但不知道為何我都只能輸入1行
{ //希望能說明是否相同,若相同希望能幫我理解為何我不能輸入第2行
grade[j] +=1; //P.S. scanf("%[^\n]\n",input[i++])嘗試過,但無法ctrl+z不能跑
i-=1; //丟zero是錯誤的,但我無法debug,無從了解問題點
break;
}
}
}
for(j=i-1;j;j--)
{
for(k=0;k<j;k++)
{
if(strcmp(input[k],input[k+1])>0)
{
min = grade[k];
strcpy(test,input[k]);
grade[k] = grade[k+1];
strcpy(input[k],input[k+1]);
grade[k+1] = min;
strcpy(input[k+1],test);
}
}
}
for(j=0;j<i;j++)
{
total += grade[j];
}
for(j=0;j<i;j++)
{
printf("%s %.4f\n",input[j],(grade[j]/total)*100);
}
printf("\n");
total =0;
}
}
超時QAQ
希望能提供想法
下面還有2個問題
#include
#include
#include
int main()
{
char input[10000][31]={'\0'};
double grade[10000]={1};
double total=0;
double min;
char test[31];
char ch;
int i,k,j,s,figure=0;
scanf("%d\n",&figure);
for(s=0;s<figure;s++)
{
for(i=0;i<10000;i++)
{
grade[i] = 1;
}
//問題1:
for(i=0;gets(input[i])!=0;i++) //能不能gets(input[i]!=0) 或gets(input[i]!=NULL)取代EOF
{ //網路上有人說可以有人說不行(快搞混了QAQ
for(j=0;j<i;j++) //問題2:
{ //while(scanf("%[^\n]",input[i++])!=EOF)
if(strcmp(input[i],input[j])==0) //有其他版本這樣寫(但不知道為何我都只能輸入1行
{ //希望能說明是否相同,若相同希望能幫我理解為何我不能輸入第2行
grade[j] +=1; //P.S. scanf("%[^\n]\n",input[i++])嘗試過,但無法ctrl+z不能跑
i-=1; //丟zero是錯誤的,但我無法debug,無從了解問題點
break;
}
}
}
for(j=i-1;j;j--)
{
for(k=0;k<j;k++)
{
if(strcmp(input[k],input[k+1])>0)
{
min = grade[k];
strcpy(test,input[k]);
grade[k] = grade[k+1];
strcpy(input[k],input[k+1]);
grade[k+1] = min;
strcpy(input[k+1],test);
}
}
}
for(j=0;j<i;j++)
{
total += grade[j];
}
for(j=0;j<i;j++)
{
printf("%s %.4f\n",input[j],(grade[j]/total)*100);
}
printf("\n");
total =0;
}
}
超時原因:判斷EOF問題
問題1:
A:
gets()!=NULL,scanf()!=EOF才能判斷EOF
不過您TLE的原因應該不是這個
gets()不太安全,緩衝區會爆炸(溢位),C11之後,gets()不為標準函式
可以用fgets()取代
問題2:
A:
while(scanf("%[^\n]",input[i++])!=EOF)
%[^\n]代表遇到換行才會中止
所以輸入一行後就回傳EOF了
也可用fgets取代
結論:
我覺得gets()不太安全,有可能是它的問題(我用它常常錯)
當然也有可能是其他問題
超時QAQ
希望能提供想法
下面還有2個問題
#include
#include
#include
int main()
{
char input[10000][31]={'\0'};
double grade[10000]={1};
double total=0;
double min;
char test[31];
char ch;
int i,k,j,s,figure=0;
scanf("%d\n",&figure);
for(s=0;s<figure;s++)
{
for(i=0;i<10000;i++)
{
grade[i] = 1;
}
//問題1:
for(i=0;gets(input[i])!=0;i++) //能不能gets(input[i]!=0) 或gets(input[i]!=NULL)取代EOF
{ //網路上有人說可以有人說不行(快搞混了QAQ
for(j=0;j<i;j++) //問題2:
{ //while(scanf("%[^\n]",input[i++])!=EOF)
if(strcmp(input[i],input[j])==0) //有其他版本這樣寫(但不知道為何我都只能輸入1行
{ //希望能說明是否相同,若相同希望能幫我理解為何我不能輸入第2行
grade[j] +=1; //P.S. scanf("%[^\n]\n",input[i++])嘗試過,但無法ctrl+z不能跑
i-=1; //丟zero是錯誤的,但我無法debug,無從了解問題點
break;
}
}
}
for(j=i-1;j;j--)
{
for(k=0;k<j;k++)
{
if(strcmp(input[k],input[k+1])>0)
{
min = grade[k];
strcpy(test,input[k]);
grade[k] = grade[k+1];
strcpy(input[k],input[k+1]);
grade[k+1] = min;
strcpy(input[k+1],test);
}
}
}
for(j=0;j<i;j++)
{
total += grade[j];
}
for(j=0;j<i;j++)
{
printf("%s %.4f\n",input[j],(grade[j]/total)*100);
}
printf("\n");
total =0;
}
}
超時原因:判斷EOF問題
問題1:
A:
gets()!=NULL,scanf()!=EOF才能判斷EOF
不過您TLE的原因應該不是這個
gets()不太安全,緩衝區會爆炸(溢位),C11之後,gets()不為標準函式
可以用fgets()取代
問題2:
A:
while(scanf("%[^\n]",input[i++])!=EOF)
%[^\n]代表遇到換行才會中止
所以輸入一行後就回傳EOF了
也可用fgets取代
結論:
我覺得gets()不太安全,有可能是它的問題(我用它常常錯)
當然也有可能是其他
我先去看看fgets怎麼寫好了
沒學過QQ
gets()!=NULL(我最開始是用這個)
可是錯了我才試試看gets()!=0
那能確認我的想法會超時嗎?
還是問題指出在EOF判斷上?
我討厭gets的不穩QQ
超時QAQ
希望能提供想法
下面還有2個問題
#include
#include
#include
int main()
{
char input[10000][31]={'\0'};
double grade[10000]={1};
double total=0;
double min;
char test[31];
char ch;
int i,k,j,s,figure=0;
scanf("%d\n",&figure);
for(s=0;s<figure;s++)
{
for(i=0;i<10000;i++)
{
grade[i] = 1;
}
//問題1:
for(i=0;gets(input[i])!=0;i++) //能不能gets(input[i]!=0) 或gets(input[i]!=NULL)取代EOF
{ //網路上有人說可以有人說不行(快搞混了QAQ
for(j=0;j<i;j++) //問題2:
{ //while(scanf("%[^\n]",input[i++])!=EOF)
if(strcmp(input[i],input[j])==0) //有其他版本這樣寫(但不知道為何我都只能輸入1行
{ //希望能說明是否相同,若相同希望能幫我理解為何我不能輸入第2行
grade[j] +=1; //P.S. scanf("%[^\n]\n",input[i++])嘗試過,但無法ctrl+z不能跑
i-=1; //丟zero是錯誤的,但我無法debug,無從了解問題點
break;
}
}
}
for(j=i-1;j;j--)
{
for(k=0;k<j;k++)
{
if(strcmp(input[k],input[k+1])>0)
{
min = grade[k];
strcpy(test,input[k]);
grade[k] = grade[k+1];
strcpy(input[k],input[k+1]);
grade[k+1] = min;
strcpy(input[k+1],test);
}
}
}
for(j=0;j<i;j++)
{
total += grade[j];
}
for(j=0;j<i;j++)
{
printf("%s %.4f\n",input[j],(grade[j]/total)*100);
}
printf("\n");
total =0;
}
}
超時原因:判斷EOF問題
問題1:
A:
gets()!=NULL,scanf()!=EOF才能判斷EOF
不過您TLE的原因應該不是這個
gets()不太安全,緩衝區會爆炸(溢位),C11之後,gets()不為標準函式
可以用fgets()取代
問題2:
A:
while(scanf("%[^\n]",input[i++])!=EOF)
%[^\n]代表遇到換行才會中止
所以輸入一行後就回傳EOF了
也可用fgets取代
結論:
我覺得gets()不太安全,有可能是它的問題(我用它常常錯)
當然也有可能是其他
我先去看看fgets怎麼寫好了
沒學過QQ
gets()!=NULL(我最開始是用這個)
可是錯了我才試試看gets()!=0
那能確認我的想法會超時嗎?
還是問題指出在EOF判斷上?
我討厭gets的不穩QQ
絕對是EOF
你的程式連測試執行都會TLE
這題測資不算多,將所有物種的數量記下來算比例即可。
2s,<10M對C的scanf綽綽有餘(我用C++寫(scanf,printf,getline)可以過(1S,1.1MB))
超時QAQ
希望能提供想法
下面還有2個問題
#include
#include
#include
int main()
{
char input[10000][31]={'\0'};
double grade[10000]={1};
double total=0;
double min;
char test[31];
char ch;
int i,k,j,s,figure=0;
scanf("%d\n",&figure);
for(s=0;s<figure;s++)
{
for(i=0;i<10000;i++)
{
grade[i] = 1;
}
//問題1:
for(i=0;gets(input[i])!=0;i++) //能不能gets(input[i]!=0) 或gets(input[i]!=NULL)取代EOF
{ //網路上有人說可以有人說不行(快搞混了QAQ
for(j=0;j<i;j++) //問題2:
{ //while(scanf("%[^\n]",input[i++])!=EOF)
if(strcmp(input[i],input[j])==0) //有其他版本這樣寫(但不知道為何我都只能輸入1行
{ //希望能說明是否相同,若相同希望能幫我理解為何我不能輸入第2行
grade[j] +=1; //P.S. scanf("%[^\n]\n",input[i++])嘗試過,但無法ctrl+z不能跑
i-=1; //丟zero是錯誤的,但我無法debug,無從了解問題點
break;
}
}
}
for(j=i-1;j;j--)
{
for(k=0;k<j;k++)
{
if(strcmp(input[k],input[k+1])>0)
{
min = grade[k];
strcpy(test,input[k]);
grade[k] = grade[k+1];
strcpy(input[k],input[k+1]);
grade[k+1] = min;
strcpy(input[k+1],test);
}
}
}
for(j=0;j<i;j++)
{
total += grade[j];
}
for(j=0;j<i;j++)
{
printf("%s %.4f\n",input[j],(grade[j]/total)*100);
}
printf("\n");
total =0;
}
}
超時原因:判斷EOF問題
問題1:
A:
gets()!=NULL,scanf()!=EOF才能判斷EOF
不過您TLE的原因應該不是這個
gets()不太安全,緩衝區會爆炸(溢位),C11之後,gets()不為標準函式
可以用fgets()取代
問題2:
A:
while(scanf("%[^\n]",input[i++])!=EOF)
%[^\n]代表遇到換行才會中止
所以輸入一行後就回傳EOF了
也可用fgets取代
結論:
我覺得gets()不太安全,有可能是它的問題(我用它常常錯)
當然也有可能是其他
我先去看看fgets怎麼寫好了
沒學過QQ
gets()!=NULL(我最開始是用這個)
可是錯了我才試試看gets()!=0
那能確認我的想法會超時嗎?
還是問題指出在EOF判斷上?
我討厭gets的不穩QQ
絕對是EOF
你的程式連測試執行都會TLE
這題測資不算多,將所有物種的數量記下來算比例即可。
2s,<10M對C的scanf綽綽有餘(我用C++寫(scanf,printf,getline)可以過(1S,1.1MB))
for(i=0;fgets(input[i],31,stdin)!=NULL;i++)
{
int num = strlen(input[i]);
input[i][num-1] = '\0'; //把\n換成\0
for(j=0 ; j<i ; j++)
{
if(strcmp(input[i],input[j])==0)
{
grade[j]++;
i--;
break;
}
}
}
那fgets該怎麼寫,或是哪裡有看懂fgets的資源
(我書上找不到fgets)
查網路,我目前寫的是上面這樣
但依然TLE
超時QAQ
希望能提供想法
下面還有2個問題
#include
#include
#include
int main()
{
char input[10000][31]={'\0'};
double grade[10000]={1};
double total=0;
double min;
char test[31];
char ch;
int i,k,j,s,figure=0;
scanf("%d\n",&figure);
for(s=0;s<figure;s++)
{
for(i=0;i<10000;i++)
{
grade[i] = 1;
}
//問題1:
for(i=0;gets(input[i])!=0;i++) //能不能gets(input[i]!=0) 或gets(input[i]!=NULL)取代EOF
{ //網路上有人說可以有人說不行(快搞混了QAQ
for(j=0;j<i;j++) //問題2:
{ //while(scanf("%[^\n]",input[i++])!=EOF)
if(strcmp(input[i],input[j])==0) //有其他版本這樣寫(但不知道為何我都只能輸入1行
{ //希望能說明是否相同,若相同希望能幫我理解為何我不能輸入第2行
grade[j] +=1; //P.S. scanf("%[^\n]\n",input[i++])嘗試過,但無法ctrl+z不能跑
i-=1; //丟zero是錯誤的,但我無法debug,無從了解問題點
break;
}
}
}
for(j=i-1;j;j--)
{
for(k=0;k<j;k++)
{
if(strcmp(input[k],input[k+1])>0)
{
min = grade[k];
strcpy(test,input[k]);
grade[k] = grade[k+1];
strcpy(input[k],input[k+1]);
grade[k+1] = min;
strcpy(input[k+1],test);
}
}
}
for(j=0;j<i;j++)
{
total += grade[j];
}
for(j=0;j<i;j++)
{
printf("%s %.4f\n",input[j],(grade[j]/total)*100);
}
printf("\n");
total =0;
}
}
超時原因:判斷EOF問題
問題1:
A:
gets()!=NULL,scanf()!=EOF才能判斷EOF
不過您TLE的原因應該不是這個
gets()不太安全,緩衝區會爆炸(溢位),C11之後,gets()不為標準函式
可以用fgets()取代
問題2:
A:
while(scanf("%[^\n]",input[i++])!=EOF)
%[^\n]代表遇到換行才會中止
所以輸入一行後就回傳EOF了
也可用fgets取代
結論:
我覺得gets()不太安全,有可能是它的問題(我用它常常錯)
當然也有可能是其他
我先去看看fgets怎麼寫好了
沒學過QQ
gets()!=NULL(我最開始是用這個)
可是錯了我才試試看gets()!=0
那能確認我的想法會超時嗎?
還是問題指出在EOF判斷上?
我討厭gets的不穩QQ
絕對是EOF
你的程式連測試執行都會TLE
這題測資不算多,將所有物種的數量記下來算比例即可。
2s,<10M對C的scanf綽綽有餘(我用C++寫(scanf,printf,getline)可以過(1S,1.1MB))
for(i=0;fgets(input[i],31,stdin)!=NULL;i++)
{
int num = strlen(input[i]);
input[i][num-1] = '\0'; //把\n換成\0
for(j=0 ; j
{
if(strcmp(input[i],input[j])==0)
{
grade[j]++;
i--;
break;
}
}
}
那fgets該怎麼寫,或是哪裡有看懂fgets的資源
(我書上找不到fgets)
查網路,我目前寫的是上面這樣
但依然TLE
你寫的fgets是對的
所以可能不是這個問題
可是每組測資是以一空白行結尾,空白行=EOF
判斷空白行,我用getline這樣寫,相信fgets也有類似的寫法:
while( getline(cin, input) && input != "" )