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("%dn", 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("%dn", max);
    }
    return 0;
}

这是我自己学C 输入数字,字符、回车的笔记:

c语言中 scanf后面一定要跟个 getchar吃回车吗?
如果后面有个scanf或者getchar()读取字符型的话就会读到回车了(输入流缓冲区会保留回车)。fflush和getchar以及相关的一些函数可以吞掉后面的回车

#include
int main()
{
char a;

scanf("%c",&a);
printf("你输入了%cn",a);

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

scanf("%c",&a);
printf("你输入了%cn",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(次数)代替。。 这样,往后自己回看,或者供给他人阅读,都很方便。希望对楼主有用

解决方案二:

lz你把这道题的出处po一下

时间: 2024-12-27 14:35:14

poj-新手OJ一题,自认为正确, 但是wrong,恳求大神指出的相关文章

c++-一道OJ上的题,数的划分,求大神解答

问题描述 一道OJ上的题,数的划分,求大神解答 有N个排列好的数,不改变排列次序,要分成K个部分,每个部分至少有一个数, (其中K <=N),若将每一个部分的数相乘,然后将K个部分相加,则可以得到一个表达式,求这个表达式的最大数值. 输入格式文件第一行为2个整数N.K下面N行为N个整数(N<=100,整数的范围都在整型以内)样例输入5 2 12345 样例输出121 我的思路是动态规划:以f(ij)表示分成i组,最后一个数是j的最大数值.以下是我的代码: #include <iostre

acm-刷ACM的小伙伴进uva oj 455 Periodic Strings,求大神指出我的问题

问题描述 刷ACM的小伙伴进uva oj 455 Periodic Strings,求大神指出我的问题 Periodic Strings A character string is said to have period k if it can be formed by concatenating one or more repetitions of another string of length k. For example the string ""abcabcabcabc&qu

c++-我在oj上输出时提示格式错误,求大神指教

问题描述 我在oj上输出时提示格式错误,求大神指教 #include using namespace std; int main() { int n; cin >> n; int * p = new int[n * 2]; int i; for (i = 0; i < n; i++) { cin >> p[i * 2]; cin >> p[i * 2 + 1]; } for (i = 0; i < n; i++) { int a = p[i * 2]; in

C程序新手。为什么换行情况会是这个结果..求大神帮忙分析下

问题描述 C程序新手.为什么换行情况会是这个结果..求大神帮忙分析下 #include "stdio.h" void main() { int i,j,k,l=0; for(i=1;i<5;i++) for(j=1;j<5;j++) for(k=1;k<5;k++) { if(i!=k&&i!=j&&j!=k) printf("%d%d%d ",i,j,k); l++; if(l%5==0) printf("

新手求助!树莓派内核编译时出错!求大神解答

问题描述 新手求助!树莓派内核编译时出错!求大神解答 树莓派编译时显示重复的case常量 找到相应代码有下面这样的说明,但是不知道该怎么改,有没有知道的大神,求教啊-- 解决方案 你的源码跟编译环境是否匹配

新手安装MOS 8.0..一直没成功 ,求大神打救

问题描述 实机OS:win8.1virtualbox版本:5.0.16MOS镜像版本:MirantisOpenStackFuel8.0xshell版本:5.0按照这个教程一步一步做..最后部署完成后出现这个画面请问这是否代表MOS已经安装成功了?主要的问题其实是..我按照教程把xshell里面的账户密码通道填好后..点连接..一直提示连接失败还有我的MOS界面一直提示startdocker失败正常吗.. 解决方案 本帖最后由 poprei 于 2016-06-05 17:47:39 编辑

新手 求帮助 Hadoop下运行Wordcount报错 求大神拯救 折腾一个星期了

问题描述 $hadoopjarhadoop-examples-1.2.1.jarwordcountinputoutput15/11/1520:03:45ERRORsecurity.UserGroupInformation:PriviledgedActionExceptionas:Administratorcause:org.apache.hadoop.ipc.RemoteException:org.apache.hadoop.mapred.SafeModeException:JobTracker

c语言编写了个链表,但无法正确的输出,求大神指导

问题描述 c语言编写了个链表,但无法正确的输出,求大神指导 链表方面一直不是特别清楚.自己编了个链表,但却无法正确输出,求大神帮忙 #include #include typedef struct lnode Lnode; struct lnode { int data; Lnode *next; }; Lnode *makeNode(int data) { Lnode *new_node=(Lnode *)malloc(sizeof(Lnode)); if(new_node==NULL) {

编程c语言-新手OJ, 找出字符串中出现最多的字母,本机运行正确, 但是wrong answer, 求大神指点

问题描述 新手OJ, 找出字符串中出现最多的字母,本机运行正确, 但是wrong answer, 求大神指点 Description 钟Sir是一个迷信的(superstitious)家伙.他相信每一个字符串(string)里都有一个幸运字符.我们可以通过以下方法找到这个字符.例如,在字符串abbccc中,c 出现的次数最多,所以这个幸运字符就是 c 啦!(>_<) ?(钟Sir的想法好简单啊-) Input 第一行是测试数据的组数n,接下来的每组测试数据占一行,每行数据不超过1000个字符且