下面是我做的杭电的ACM程序第1004题,为什么交上去之后总是显示“wrong answer”?帮忙看看啊!
#include<iostream>#include<vector>#include<string>usingnamespacestd;intmain(){inti,j,...
#include <iostream>
#include <vector>
#include <string>
using namespace std;
int main()
{
int i,j,a,f=0,t=0,p,flag;
int e[1000]={0};
string c,d;
vector<string> b;
cin>>a;
while(a!=0)
{
p=1;
f=0;
t=0;
for(i=0;i<a;i++)
{
flag=0;
e[i]=0;
cin>>c;
if(i==0)
b.push_back(c);
else
{
for(j=0;j<p;j++)
if(c==b[j])
{e[j]++;
flag=1;}
if(flag==0)
{
b.push_back(c);
p++;
}
}
}
for(j=0;j<p+1;j++)
if(f<e[j])
{
f=e[j];
t=j;
}
cout<<b[t]<<endl;
b.clear();
cin>>a;
}
return 0;
} 展开
#include <vector>
#include <string>
using namespace std;
int main()
{
int i,j,a,f=0,t=0,p,flag;
int e[1000]={0};
string c,d;
vector<string> b;
cin>>a;
while(a!=0)
{
p=1;
f=0;
t=0;
for(i=0;i<a;i++)
{
flag=0;
e[i]=0;
cin>>c;
if(i==0)
b.push_back(c);
else
{
for(j=0;j<p;j++)
if(c==b[j])
{e[j]++;
flag=1;}
if(flag==0)
{
b.push_back(c);
p++;
}
}
}
for(j=0;j<p+1;j++)
if(f<e[j])
{
f=e[j];
t=j;
}
cout<<b[t]<<endl;
b.clear();
cin>>a;
}
return 0;
} 展开
展开全部
你的代码有很多地方是没必要的,可以改
比如:在if(c==b[j]){e[j]++; flag=1;} 里面可以加break;
还有连续输入为什么不写成
while(cin >> a){ if(a==0) break; ....... } 不会觉得这样直观很多吗?当然这是个人习惯问题,这是题外话,见谅
你这个过不了这个数据(暂时发现的):
先输入
3
a
w
w
紧接着输入:
1
a
会报错
下面是我 根据你的思路, 改良过的, 能AC
#include <iostream>
#include <string>
using namespace std;
int main()
{
int a;
string str, all[1000];
while(cin >> a){
if( a == 0) break;
int i, sum[1000], num = 0, ans;
memset(sum, 0, sizeof(int)*1000);
cin >> all[0]; //第一次不管输入什么, 都会被保存的
num++; // 不同颜色的总数 变成1
sum[0] = 1;
ans = 0; //初始化答案的下标是第一个
for(i = 1; i < a; ++i){
cin >> str;
int j;
for(j = 0; j < num; ++j){
if(str == all[j]){
break;
}
}
if(j < num){
sum[j]++;
if(sum[j] > sum[ans]) ans = j;
}
else{
all[ num ] = str;
sum[ num ] = 1;
num++;
}
}
cout << all[ans] << endl;
}
return 0;
}
比如:在if(c==b[j]){e[j]++; flag=1;} 里面可以加break;
还有连续输入为什么不写成
while(cin >> a){ if(a==0) break; ....... } 不会觉得这样直观很多吗?当然这是个人习惯问题,这是题外话,见谅
你这个过不了这个数据(暂时发现的):
先输入
3
a
w
w
紧接着输入:
1
a
会报错
下面是我 根据你的思路, 改良过的, 能AC
#include <iostream>
#include <string>
using namespace std;
int main()
{
int a;
string str, all[1000];
while(cin >> a){
if( a == 0) break;
int i, sum[1000], num = 0, ans;
memset(sum, 0, sizeof(int)*1000);
cin >> all[0]; //第一次不管输入什么, 都会被保存的
num++; // 不同颜色的总数 变成1
sum[0] = 1;
ans = 0; //初始化答案的下标是第一个
for(i = 1; i < a; ++i){
cin >> str;
int j;
for(j = 0; j < num; ++j){
if(str == all[j]){
break;
}
}
if(j < num){
sum[j]++;
if(sum[j] > sum[ans]) ans = j;
}
else{
all[ num ] = str;
sum[ num ] = 1;
num++;
}
}
cout << all[ans] << endl;
}
return 0;
}
追问
嘿嘿,谢谢了,我知道我在哪出错了,最后判断应该是小于p,而不是p+1,刚改了,交上去通过了,哈哈,不过还是谢谢啊!
追答
嗯...你可以结案了
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询