程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程綜合問答 >> poj-新手OJ一題,自認為正確, 但是wrong,懇求大神指出

poj-新手OJ一題,自認為正確, 但是wrong,懇求大神指出

編輯:編程綜合問答
新手OJ一題,自認為正確, 但是wrong,懇求大神指出

Description
鐘Sir是一個迷信的(superstitious)家伙。他相信每一個字符串(string)裡都有一個幸運字符。我們可以通過以下方法找到這個字符。例如,在字符串abbccc中,c 出現的次數最多,所以這個幸運字符就是 c 啦!(>_<) (鐘Sir的想法好簡單啊…)
Input
第一行是測試數據的組數n,接下來的每組測試數據占一行,每行數據不超過1000個字符且非空。
字符串裡只含小寫字母。
Output
每組數據對應輸出一行,包括出現次數最多的字符和該字符出現的次數,中間是一個空格。如果有多個字符出現的次數相同且最多,那麼輸出ASCII碼最小的那一個字符。
Sample Input
2
abbccc
adfadffasdf
Sample Output
c 3
f 4


#include
int main(void){
int z[30], n, t, g, i, j, a, xia, max;
char ch;
scanf("%d", &t);
for(g=1; g<=t+1; g++){

for(i=1; i<=28; i++)
z[i]=0;//記錄數組初始化

for(i=1; i<=1000; i++){
ch=getchar();
if(ch=='\n')
break;
a=ch-'a'+1;
z[a]++;
}//統計到記錄數組

max=-9;
for(i=1; i<=26; i++){
if(z[i]>max)
{max=z[i]; xia=i;}
}

if(g!=1){
ch='a'+xia-1;
printf("%c ", ch);
printf("%d\n", max);
}
}
return 0;
}

最佳回答:


樓主,我幫你看了一個,主要問題是關於C語言在scanf之後,還在輸入字符的問題.
我先把改過的代碼給出 :

 #include <stdio.h>
int main(void)
{
    int z[30], n, t, g, i, j, a, xia, max;
    char ch;
    scanf("%d", &t);
    getchar();
    for(g=1; g<=t; g++)
    {
        for(i=1; i<=28; i++)
            z[i]=0;//記錄數組初始化
        for(i=1; i<=1000; i++)
        {
            ch=getchar();
            if(ch=='\n')
                break;
            a=ch-'a'+1;
            z[a]++;
        }//統計到記錄數組
        max=-9;
        for(i=1; i<=26; i++)
        {
            if(z[i]>max)
            {max=z[i]; xia=i;}
        }
        ch='a'+xia-1;
        printf("%c ", ch);
        printf("%d\n", max);
    }
    return 0;
}

這是我自己學C 輸入數字,字符、回車的筆記:

c語言中 scanf後面一定要跟個 getchar吃回車嗎?
如果後面有個scanf或者getchar()讀取字符型的話就會讀到回車了(輸入流緩沖區會保留回車)。fflush和getchar以及相關的一些函數可以吞掉後面的回車

#include
int main()
{
char a;

scanf("%c",&a);
printf("你輸入了%c\n",a);

// fflush(stdin); 也可以用getchar()吞掉回車

scanf("%c",&a);
printf("你輸入了%c\n",a);

return 0;
}

但是為什麼把%c換成%d結果就不一樣了?
%d 輸入的時候,也是輸入了數字+ 回車符
這時候就看你下一條 輸入語句是什麼了 如果也是 %d 那麼沒問題
如果下一條 是 %c那麼就會讀取到留在緩沖區裡的 回車符號
可以百度 搜索“ C 輸數字 字符 回車 ”,看一下第二篇文章

在scanf 之後 可以用 fflush(stdin) 清空緩沖區。
函數名: fflush
功 能: 清除一個流
用 法: int fflush(FILE *stream);
頭文件

getch()、getche()和getchar()函數
(1) getch()和getche()函數
這兩個函數都是從鍵盤上讀入一個字符。其調用格式為:
getch();
getche();
兩者的區別是: getch()函數不將讀入的字符回顯在顯示屏幕上, 而getche()
函數卻將讀入的字符回顯到顯示屏幕上。
例1:
#include
#include //頭文件
main()
{
char c, ch;
c=getch(); /*從鍵盤上讀入一個字符不回顯送給字符變量c*/
putchar(c); /*輸出該字符*/
ch=getche(); /*從鍵盤上帶回顯的讀入一個字符送給字符變量ch*/
putchar(ch);
}
利用回顯和不回顯的特點, 這兩個函數經常用於交互輸入的過程中完成暫停
等功能。

例2:
#include
main()
{
char c, s[20];
printf("Name:");
gets(s);
printf("Press any key to continue..."); //這樣不會在打印出這句話後,立即輸出Press any key to continue 而是等待你輸入一個不回顯的回車後,再輸出最後一句話。
getch(); /*等待輸入任一鍵*/
}

(2) getchar()函數

函數名: getchar
功 能: 從stdin流中讀字符
用 法: int getchar(void);
頭文件: #include

getchar()函數也是從鍵盤上讀入一個字符, 並帶回顯。它與前面兩個函數
的區別在於: getchar()函數等待輸入直到按回車才結束, 回車前的所有輸入字
符都會逐個顯示在屏幕上。但只有第一個字符作為函數的返回值。

#include

getchar()函數的調用格式為:
getchar();
例3:
#include
#include
main()
{
char c;
c=getchar(); /*從鍵盤讀入字符直到回車結束*/
putchar(c); /*顯示輸入的第一個字符*/
getch(); /*等待按任一健*/
}
例4
#include
#include
main()
{
char c;
while ((c=getchar())!='\n') /*每個getchar()依次讀入一個字符*/
printf("%c",c); /*按照原樣輸出*/
getch(); /*等待按任一健*/
}

getch()等待讀取鍵盤輸入的一個字符,不顯示與屏幕上

getche()顯示與屏幕上

我想,如果看了上面的筆記應該會幫助樓主。其實樓主的算法沒有問題。但是我有一些建議給樓主,在取變量名的時候,最見名知義。
比如,用於統計的數組z[],可以用count[]代替,t可以用times(次數)代替。。 這樣,往後自己回看,或者供給他人閱讀,都很方便。希望對樓主有用

qq_32653757
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved