题目描述
解题
有N个人,最多就有N个学校,创建一个长度为N的数组,存放每个学校的总成绩,最后比出最大的即可,本菜鸡写此题的遇到了几个难点:
判断读入行是否非空:
string str;
while(getline(cin,str)){
if(str.empty()){
cout<<"empty!";
break;
}
}
然而在运行发现了一些问题,代码是这样的~
#include<iostream>
#include<string>
using namespace std;
#define N 100000
int main(){
int n; // 总人数
cin>>n;
string inf; //每一行的学校编号和成绩
int score[N];// 总共n人,最多有n个学校,数组存放n个学校的总分数
while(getline(cin,inf)){
if(inf.empty()){
cout<<"empty!";
break;
}
}
}
当输入完第一行的时候按下回车的时候,竟然直接结束了!查了一下,原因在于cin>>和getline混用的时候,由于cin>>不会主动删除输入流内的换行符,换行符随后被getline读取到,getline遇到换行符返回,所以会直接结束!
解决办法是在cin>>后加上cin.ignore()即可
#include<iostream>
#include<string>
using namespace std;
#define N 100000
int main(){
int n; // 总人数
cin>>n;
cin.ignore();
string inf; //每一行的学校编号和成绩
int score[N];// 总共n人,最多有n个学校,数组存放n个学校的总分数
while(getline(cin,inf)){
if(inf.empty()){
cout<<"empty!";
break;
}
}
}
根据空格分割字符串以及将string类型转换为int类型:
pos=inf.find(' ');
len=inf.length();
number = atoi( inf.substr(0,pos).c_str() );
marks = atoi( inf.substr(pos+1,len-pos).c_str() );
最终代码:
#include<iostream>
#include<string>
using namespace std;
#define N 100000
int findmax(int score[],int n);
int main(){
int n; // 总人数
cin>>n;
cin.ignore();
string inf; //每一行的学校编号和成绩
int score[N+1]={0};// 总共n人,最多有n个学校,数组存放n个学校的总分数,数组与学校编号对号入座,从1开始存
while(getline(cin,inf)){
if(inf.empty()){
break;
}
int number,marks,pos,len; //每一个学生的编号和成绩,空格所处的位置,每一行的长度
pos=inf.find(' ');
len=inf.length();
number = atoi( inf.substr(0,pos).c_str() );
marks = atoi( inf.substr(pos+1,len-pos).c_str() );
score[number]+=marks;
}
int max=0,maxnumber=0;
for(int i=1;i<N;i++)
{
if(max<score[i])
{
max=score[i];
maxnumber=i;
}
}
cout<<maxnumber<<" "<<max;
}
直到写下面一题的时候才发现,我是chunbi,把输入格式处理想多了,本来这么简单就行
#include<iostream>
using namespace std;
#define N 100000
int findmax(int score[],int n);
int main(){
int n; // 总人数
cin>>n;
int score[N+1]={0};// 总共n人,最多有n个学校,数组存放n个学校的总分数,数组与学校编号对号入座,从1开始存
for(int i=1;i<n+1;i++){
int number,marks;
cin>>number>>marks;
score[number]+=marks;
}
int max=0,maxnumber=0;
for(int i=1;i<N+1;i++){
if(max<score[i]){
max=score[i];
maxnumber=i;
}
}
cout<<maxnumber<<" "<<max;
}