xhz0311 @ 2022-12-05 18:41:47
求帮助,可以过样例,但全WA
#include <cstdio>
using namespace std;
struct stu{
char name[8];
int yw;
int sx;
int yy;
int sum;
};
int main()
{
int k;
scanf("%d",&k);
struct stu m,n;
for (int j=0; j<8; j++)
{
scanf("%c",&m.name[j]);
if (int (m.name[j])==32)
{
break;
}
}
scanf("%d",&m.yw);
scanf("%d",&m.sx);
scanf("%d",&m.yy);
m.sum=m.yw+m.sx+m.yy;
for (int i=1; i<k; i++)
{
for (int j=0; j<8; j++)
{
scanf("%c",&n.name[j]);
if (n.name[j]==32)
{
break;
}
}
scanf("%d",&n.yw);
scanf("%d",&n.sx);
scanf("%d",&n.yy);
n.sum=n.yw+n.sx+n.yy;
}
if (n.sum > m.sum)
{
m=n;
}
for (int i=0; i<=7; i++)
{
if (m.name[i]==' ')
{
break;
}
printf("%c",m.name[i]);
}
printf(" %d %d %d",m.yw, m.sx,m.yy);
return 0;
}
by xhz0311 @ 2022-12-05 18:42:52
错误信息全部是 Too short on line 1
by register_new @ 2022-12-05 18:51:24
@xhz0311 别急,给我看看,首先我感觉你名字还是用string类型吧,名字不是全是8个字符的
by register_new @ 2022-12-05 18:52:58
@xhz0311 你的排序在哪里?
by register_new @ 2022-12-05 18:53:33
@xhz0311 先要排序才输出啊,你检查一下你自己的思路
by _Virgo_ @ 2022-12-05 18:53:52
@xhz0311
建议先自学 c++ string用法。
做此题 用string的话
从
for (int j=0; j<8; j++)
{
scanf("%c",&m.name[j]);
if (int (m.name[j])==32)
{
break;
}
}
能变到:
cin>>m.name
同时:
char name[8];
改成
string name
这样能为你省去不少麻烦
但c++记得用万能头:
#include<bits/stdc++.h>
#include<bits/stdc++.h>
using namespace std;
struct stu{
char name[8];
int yw;
int sx;
int yy;
int sum;
};
int main()
{
int k;
scanf("%d",&k);
struct stu m,n;
for (int j=0; j<8; j++)
{
scanf("%c",&m.name[j]);
if (int (m.name[j])==32)
{
break;
}
}
scanf("%d",&m.yw);
scanf("%d",&m.sx);
scanf("%d",&m.yy);
m.sum=m.yw+m.sx+m.yy;
for (int i=1; i<k; i++)
{
for (int j=0; j<8; j++)
{
scanf("%c",&n.name[j]);
if (n.name[j]==32)
{
break;
}
}
scanf("%d",&n.yw);
scanf("%d",&n.sx);
scanf("%d",&n.yy);
n.sum=n.yw+n.sx+n.yy;
if (n.sum > m.sum)
{
m=n;
}//应放到循环中
}
for (int i=0; i<=7; i++)
{
if (m.name[i]==' ')
{
break;
}
printf("%c",m.name[i]);
}
printf(" %d %d %d",m.yw, m.sx,m.yy);
return 0;
}
by xhz0311 @ 2022-12-05 18:55:07
我之前用排序,样例都过不了
是参考的一篇题解中的思路
“看了看其他大佬好像都用了STL。对新人很是友好,我的思路比较简单,应该完全是看得懂的。 我是在输入期间就直接判断总分大小,因此第一个学生的信息是单独输入的。而接下来输入的信息用的是 另一组变量。形象一点解释,就好比一个打擂赛。第一位选手直接成为擂主(单独输入)。”
by _Virgo_ @ 2022-12-05 18:55:27
@Virgo 两方面结合起来
by _Virgo_ @ 2022-12-05 19:18:59
@xhz0311 代码高亮中没string份。
你不会用 cout/cin吗?
by xhz0311 @ 2022-12-05 19:21:09
@Virgo
emmmmmm 改成这样还是不行
#include <cstdio>
#include <string>
using namespace std;
struct stu{
string name;
int yw;
int sx;
int yy;
int sum;
};
int main()
{
int k;
scanf("%d",&k);
struct stu m,n;
scanf("%s %d %d %d",&m.name,&m.yw,&m.sx,&m.yy);
m.sum=m.yw+m.sx+m.yy;
for (int i=1; i<k; i++)
{
scanf("%s %d %d %d",&n.name,&n.yw,&n.sx,&n.yy);
n.sum=n.yw+n.sx+n.yy;
}
if (n.sum > m.sum)
{
m=n;
}
printf("%s %d %d %d",m.name,m.yw, m.sx,m.yy);
return 0;
}
全RE了。。。
Runtime Error.
Received signal 11: Segmentation fault with invalid memory reference.
by __er @ 2022-12-05 19:26:10
@xhz0311 思路混乱啊,char可以不改,直接cin不要循环,然后写了结构体就写自定义排序sort即可