问题标题: 酷町堂:1491

1
0
已解决
李奕歌
李奕歌
初级天翼
初级天翼

题目描述 Description

酷町堂共有n个学生,现统计每位学生的出生年月日,试找出所有同年同月同日生的学生,并输出出来。

输入描述 Input Description

输入为n+1行:
第一行为酷町堂的学生数n(n≤100);
之后的n行为酷町堂学员的姓名以及出生年(其中年份在01年以后)、月、日,中间用单个空格隔开。

输出描述 Output Description

输出每一行为每一组生日相同的学生,其中前三个数字表示出生年、月、日,之后为生日相同的学生姓名。对于所有的输出,年月日按照从日历从前到后的顺序输出,对于生日相同的学生姓名,按照姓名从短到长的顺序输出,如果长度相同,则按照字典序输出。如果没有生日相同的学生,则输出“No”。

样例输入 Sample Input

6 Liudehua 05 3 2 Zhoujielun 05 4 5 Chenyixue 05 3 2 Huge 05 4 5 Liuyifei 05 3 2 Wanglihong 06 3 2

样例输出 Sample Output

05 3 2 Liudehua Liuyifei Chenyixue 05 4 5 Huge Zhoujielun

WA 50:

#include"bits/stdc++.h"
using namespace std;
struct abab{
    string n,y,m,d;
}a[105];
bool cmp(abab a,abab b){
    if(a.y!=b.y)return a.y<b.y;
    if(a.m!=b.m)return a.m<b.m;
    if(a.d!=b.d)return a.d<b.d;
    if(a.n.size()!=b.n.size())return a.n.size()<b.n.size();
    return a.n<b.n;
}

bool check(int x){
    if(a[x].y==a[x+1].y&&a[x].m==a[x+1].m&&a[x].d==a[x+1].d){
        return true;
    }
        return false;
}
bool f=0;
int main(){
    int n;
    cin>>n;
    for(int i=1;i<=n;i++){
    cin>>a[i].n>>a[i].y>>a[i].m>>a[i].d;
    }
    sort(a+1,a+n+1,cmp);
    for(int i=1;i<=n;i++){
    if(check(i)){
    cout<<a[i].y<<" "<<a[i].m<<" "<<a[i].d<<" "<<a[i].n;
    f=1;
    while(check(i)){
    i++;
    cout<<" "<<a[i].n;
    }
    cout<<endl;
}

    if(f==0)cout<<"No";
}   
    return 0;

 


0
已采纳
王文博
王文博
缔造者之神
缔造者之神

cout<<endl;要在if判断里面,while循环的后面

否则就会出现输出:

(多出来一行)

No

望采纳!

0
王文博
王文博
缔造者之神
缔造者之神
#include <bits/stdc++.h>
using namespace std;
int n,t,b[30001],k,cnt;
int main()
{
    cin>>n>>k;
    for(int i=1;i<=n;i++)
    {
        cin>>t;
        b[t]++;
    }
    for(int i=1;i<=30000;i++)
    {
        if(b[i]!=0) cnt++;
        if(cnt==k)
        {
            cout<<i;
            return 0;
        }
    }
    cout<<"NO RESULT";
}

 

0
我要回答