杭电ACM 2025问下 我写的哪里错了,老是wronganswer
自己用编译器运行结果都是对的啊。。。#include<stdio.h>#include<string.h>intmain(){chara[601];intn=0,j=0,...
自己用编译器运行结果都是对的啊。。。
#include <stdio.h>
#include <string.h>
int main()
{
char a[601];
int n=0,j=0,b[101];
while(scanf("%s",a)!=EOF)
{
n=strlen(a);
int h=0;
char max;
max=a[0];
for(int i=0;i<=n-1;i++)
if(a[i]>max)
max=a[i];
for(int i=0;i<=n-1;i++)
{
if(a[i]==max)
{
b[j]=i;
j++;
}
}
for(int k=0;k<=j-1;k++)
{
int count=0;
count=b[k]+1+5*h;
for(int i=(strlen(a)-1);i>=count;i--)
a[i+5]=a[i];
a[count]='(';
a[count+1]='m';
a[count+2]='a';
a[count+3]='x';
a[count+4]=')';
h++;
}
for(int i=0;i<strlen(a);i++)
printf("%c",a[i]);
printf("\n");
for(int i=0;i<=600;i++)
a[i]=0;
for(int i=0;i<=100;i++)
b[i]=0;
n=j=0;
}
return 0;
} 展开
#include <stdio.h>
#include <string.h>
int main()
{
char a[601];
int n=0,j=0,b[101];
while(scanf("%s",a)!=EOF)
{
n=strlen(a);
int h=0;
char max;
max=a[0];
for(int i=0;i<=n-1;i++)
if(a[i]>max)
max=a[i];
for(int i=0;i<=n-1;i++)
{
if(a[i]==max)
{
b[j]=i;
j++;
}
}
for(int k=0;k<=j-1;k++)
{
int count=0;
count=b[k]+1+5*h;
for(int i=(strlen(a)-1);i>=count;i--)
a[i+5]=a[i];
a[count]='(';
a[count+1]='m';
a[count+2]='a';
a[count+3]='x';
a[count+4]=')';
h++;
}
for(int i=0;i<strlen(a);i++)
printf("%c",a[i]);
printf("\n");
for(int i=0;i<=600;i++)
a[i]=0;
for(int i=0;i<=100;i++)
b[i]=0;
n=j=0;
}
return 0;
} 展开
2个回答
展开全部
你好,你的程序代码我也看过了,其实只需要找到最大的那个字母然后每次出现这个字母都输出一次“(max)”就OK了,没有必要修改字符串在内存中的内容。
你的方法并不是不可以,只是没有必要那么麻烦而已!~~~
这个题也比较简单,我只是给你测试了一下,当测例是abckdljgla时你的答案是abckdl(max)jgl(max)aA,显然错了,我也没有继续找错。其实改一下方法更好,你应该也会认同这一点的,是吧,呵呵呵。
写程序必然会有这个阶段,有错误的时候最好是自己找出来纠正,这样对自己的提升最大。有错误的时候继续测试,希望你能够拿下这个题。
我也写了一下这个题,AC了,你可以参考一下。
#include <iostream>
#include <cstring>
using namespace std;
int main()
{
char str[101];
while(cin >> str)
{
int n = strlen(str);
int i;
char max = str[0];
for(i = 1; i < n; i++)
{
if(max < str[i])
{
max = str[i];
}
}
for(i = 0; i < n; i++)
{
cout << str[i];
if(str[i] == max)
{
cout <<"(max)";
}
}
cout << endl;
}
return 0;
}
你的方法并不是不可以,只是没有必要那么麻烦而已!~~~
这个题也比较简单,我只是给你测试了一下,当测例是abckdljgla时你的答案是abckdl(max)jgl(max)aA,显然错了,我也没有继续找错。其实改一下方法更好,你应该也会认同这一点的,是吧,呵呵呵。
写程序必然会有这个阶段,有错误的时候最好是自己找出来纠正,这样对自己的提升最大。有错误的时候继续测试,希望你能够拿下这个题。
我也写了一下这个题,AC了,你可以参考一下。
#include <iostream>
#include <cstring>
using namespace std;
int main()
{
char str[101];
while(cin >> str)
{
int n = strlen(str);
int i;
char max = str[0];
for(i = 1; i < n; i++)
{
if(max < str[i])
{
max = str[i];
}
}
for(i = 0; i < n; i++)
{
cout << str[i];
if(str[i] == max)
{
cout <<"(max)";
}
}
cout << endl;
}
return 0;
}
展开全部
同学,写这么复杂干嘛啊!先理一下思路:1.按字符串方式读入一行。2.遍历数组,找出最大值。3.输出按一个字符一个字符输出,输出前判断一下值是不是最大的,是的话输出字母在多加一个(max)。参考代码如下:
#include<iostream>
#include<stdio.h>
#include<string.h>
using namespace std;
int main()
{
char D[101];
while(scanf("%s",D)!=EOF)
{
int i,len=strlen(D);
char max;
max=D[0];
for(i=0;i<len;i++)
if(max<D[i]) max=D[i];
for(i=0;i<len;i++)
{
if(D[i]==max)
printf("%c(max)",D[i]);
else
printf("%c",D[i]);
}
printf("\n");
}
return 0;
}
#include<iostream>
#include<stdio.h>
#include<string.h>
using namespace std;
int main()
{
char D[101];
while(scanf("%s",D)!=EOF)
{
int i,len=strlen(D);
char max;
max=D[0];
for(i=0;i<len;i++)
if(max<D[i]) max=D[i];
for(i=0;i<len;i++)
{
if(D[i]==max)
printf("%c(max)",D[i]);
else
printf("%c",D[i]);
}
printf("\n");
}
return 0;
}
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询