| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1468 人关注过本帖
标题:题目如下:哪位可以帮忙用c写个正确代码给我参考下,不要c++!
只看楼主 加入收藏
白衣柳相
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:142
专家分:168
注 册:2016-12-23
结帖率:82.61%
收藏
已结贴  问题点数:20 回复次数:9 
题目如下:哪位可以帮忙用c写个正确代码给我参考下,不要c++!
在一个有180人的大班级中,存在两个人生日相同的概率非常大,现给出每个学生的名字,出生月日。试找出所有生日相同的学生。

输入
第一行为整数n,表示有n个学生,n ≤ 180。此后每行包含一个字符串和两个整数,分别表示学生的名字(名字第一个字母大写,其余小写,不含空格,且长度小于20)和出生月(1 ≤ m ≤ 12)日(1 ≤ d ≤ 31)。名字、月、日之间用一个空格分隔
输出
每组生日相同的学生,输出一行,其中前两个数字表示月和日,后面跟着所有在当天出生的学生的名字,数字、名字之间都用一个空格分隔。对所有的输出,要求按日期从前到后的顺序输出。 对生日相同的名字,按名字从短到长按序输出,长度相同的按字典序输出。如没有生日相同的学生,输出”None”
样例输入
6
Avril 3 2
Candy 4 5
Tim 3 2
Sufia 4 5
Lagrange 4 5
Bill 3 2
样例输出
3 2 Tim Bill Avril
4 5 Candy Sufia Lagrange
我有c++代码,,求c!
搜索更多相关主题的帖子: 出生月 字符串 生日 字母 
2017-02-06 14:21
ICU
Rank: 4
等 级:业余侠客
威 望:2
帖 子:92
专家分:268
注 册:2017-1-14
收藏
得分:0 
有C++代码?
把类的名字去掉,成员变量定义成全局变量,成员函数定义成全局函数不就搞定了?
2017-02-06 14:39
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9025
专家分:54030
注 册:2011-1-18
收藏
得分:10 
程序代码:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

struct student
{
    unsigned month, day;
    char name[20];
};

int student_compare( const void* stu_a, const void* stu_b )
{
    struct student* a = (struct student*)stu_a;
    struct student* b = (struct student*)stu_b;

    if( a->month < b->month ) return -1;
    if( a->month > b->month ) return +1;

    if( a->day < b->day ) return -1;
    if( a->day > b->day ) return +1;

    if( strlen(a->name) < strlen(b->name) ) return -1;
    if( strlen(a->name) > strlen(b->name) ) return +1;

    return strcmp(a->name,b->name);
}

int main( void )
{
    struct student s[180];
    unsigned n;

    // 输入
    scanf( "%u", &n );
    for( unsigned i=0; i!=n; ++i )
        scanf( "%s%u%u", s[i].name, &s[i].month, &s[i].day );

    // 排序
    qsort( s, n, sizeof(*s), &student_compare );

    // 输出
    _Bool bfound = 0;
    for( unsigned i=0; i!=n; ++i )
    {
        if( i!=0 && s[i].month==s[i-1].month && s[i].day==s[i-1].day )
        {
            printf( " %s", s[i].name );
        }
        else if( i!=n && s[i].month==s[i+1].month && s[i].day==s[i+1].day )
        {
            if( bfound ) putchar( '\n' );
            printf( "%u %u %s", s[i].month, s[i].day, s[i].name );
            bfound = 1;
        }
    }
    if( !bfound )
        puts( "None" );

    return 0;
}
2017-02-06 15:11
白衣柳相
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:142
专家分:168
注 册:2016-12-23
收藏
得分:0 
回复 3楼 rjsp
谢谢,,,,,,,,,,,,,,,,,,,,,,,,大神!已经ac就喜欢这样滴

什么最重要,学习!!!! 我要你们无话可说!我想要的东西自己去拿
2017-02-06 15:21
白衣柳相
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:142
专家分:168
注 册:2016-12-23
收藏
得分:0 
我贴出c++,
#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
using namespace std;
struct ill{
        char name[21];
};
struct node{
    int num;
    ill ren[185];
}day[16][35];
bool fuu(ill x,ill y)
{
    if(strlen(x.name)<strlen(y.name))
        return 1;
    if(strlen(x.name)==strlen(y.name)&&strcmp(x.name,y.name)<0)
        return 1;
    return 0;
}
int main()
{
    int n,m,d,i,j,k;
    bool p=0;
    char a[21];
    scanf("%d",&n);
    for(i=0;i<n;i++)
    {
        scanf("%s%d%d",a,&m,&d);
        strcpy(day[m][d].ren[day[m][d].num].name,a);
        day[m][d].num++;
    }
    for(i=1;i<=12;i++)
        for(j=1;j<=31;j++)
            if(day[i][j].num)
                sort(day[i][j].ren,day[i][j].ren+day[i][j].num,fuu);
    for(i=1;i<=12;i++)
        for(j=1;j<=31;j++)
            if(day[i][j].num>1)
            {
                p=1;
                printf("%d %d",i,j);
                for(k=0;k<day[i][j].num;k++)
                    printf(" %s",day[i][j].ren[k].name);
                printf("\n");
            }
    if(!p)
        printf("None");
}
代码百度。

什么最重要,学习!!!! 我要你们无话可说!我想要的东西自己去拿
2017-02-07 10:57
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:0 
这个代码就是AC不了~不知为什么~

程序代码:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct Node
{
    int month;
    int day;
    int flag;
    char name[21];

}Node;

Node stu[180]={0};
int comp(void const *stu_a,void const *stu_b)
{
    Node *a=(Node *)stu_a;
    Node *b=(Node *)stu_b;

    if (a->month<b->month)
        return -1;
    if (a->month>b->month)
        return 1;

    if (a->day<b->day)
        return -1;
    if (a->day>b->day)
        return 1;

    if (strlen(a->name)<strlen(b->name))
        return -1;
    if (strlen(a->name)>strlen(b->name))
        return 1;

    return strcmp(a->name,b->name);
}
void print(Node *stu)
{
    static int month=0;
    static int day=0;
    
    if (month==0)
            printf ("%d %d",stu->month,stu->day);
     else if (month!=stu->month&&day!=stu->day)
         printf ("\n%d %d",stu->month,stu->day);
    
    
    month=stu->month;
    day=stu->day;
    
    printf(" %s",stu->name);
}
int main()
{
    int n=0;
    int i=0;
    int flag=0;

    memset(stu,0,sizeof(stu));

    scanf("%d",&n);

    for (i=0;i<n;i++)
    {
        scanf("%s",stu[i].name);
        scanf("%d",&stu[i].month);
        scanf("%d",&stu[i].day);
    }

    qsort(stu,n,sizeof(stu[0]),comp);

    for (i=0;i<n;i++)
    { 
        if (i&&stu[i-1].month==stu[i].month&&stu[i-1].day==stu[i].day)
            {
                stu[i-1].flag=1;
                stu[i].flag=1;
                flag=1;
            }        
            
    }

    for (i=0;i<n&&flag;i++)
        if (stu[i].flag)
            print(&stu[i]);
            
    if (flag==0)
        printf("None");

    printf("\n");
        
    
    return 0;
        
}


看看是哪一种测试数据过不了~~~~~~

[此贴子已经被作者于2017-2-7 13:11编辑过]


[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-02-07 13:05
白衣柳相
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:142
专家分:168
注 册:2016-12-23
收藏
得分:0 
回复 6楼 九转星河
那就不给你分,,

什么最重要,学习!!!! 我要你们无话可说!我想要的东西自己去拿
2017-02-08 09:05
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:0 
回复 7楼 白衣柳相
~~~

程序代码:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct Node
{
    int month;
    int day;
    int flag;
    char name[21];

}Node;

Node stu[180]={0};
int comp( const void *stu_a,const void *stu_b)
{
    Node *a=(Node *)stu_a;
    Node *b=(Node *)stu_b;

    if (a->month<b->month)
        return -1;
    if (a->month>b->month)
        return 1;

    if (a->day<b->day)
        return -1;
    if (a->day>b->day)
        return 1;

    if (strlen(a->name)<strlen(b->name))
        return -1;
    if (strlen(a->name)>strlen(b->name))
        return 1;

    return strcmp(a->name,b->name);
}
void print(Node *stu)
{
    
    static int flag=0;
    static int month=0;
    static int day=0;

    if (flag==0)
        printf ("%d %d",stu->month,stu->day);
     else if (month!=stu->month||day!=stu->day)
         printf ("\n%d %d",stu->month,stu->day);
    
    flag=1;
    month=stu->month;
    day=stu->day;
    
    printf(" %s",stu->name);
}
int main()
{
    int n=0;
    int i=0;
    int flag=0;

    memset(stu,0,sizeof(stu));

    scanf("%d",&n);

    for (i=0;i<n;i++)
    {
        scanf("%s",stu[i].name);
        scanf("%d",&stu[i].month);
        scanf("%d",&stu[i].day);
    }

    qsort(stu,n,sizeof(stu[0]),comp);

    for (i=1;i<n;i++)
    { 
        if (stu[i-1].month==stu[i].month&&stu[i-1].day==stu[i].day)
            {
                stu[i-1].flag=1;
                stu[i].flag=1;
                flag=1;
            }        
            
    }

    for (i=0;i<n&&flag;i++)
        if (stu[i].flag)
            print(&stu[i]);
            
    if (flag==0)
        printf("None");

    printf("\n");
        
    
    return 0;
        
}

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-02-08 09:52
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:10 
回复 7楼 白衣柳相
~~~
程序代码:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct Node
{
    int month;
    int day;
    char name[20];
}Node;
int cmp(const void* aa,const void* bb)
{
    Node *a=(Node*)aa;
    Node *b=(Node*)bb;

    if (a->month<b->month)
        return -1;
    if (a->month>b->month)
        return 1;

    if (a->day<b->day)
        return -1;
    if (a->day>b->day)
        return 1;

    if (strlen(a->name)<strlen(b->name))
        return -1;
    if (strlen(a->name)>strlen(b->name))
        return 1;

    return strcmp(a->name,b->name);

}
int main()
{
    Node s[180]={0};

    int i=0;
    int n=0;
    int flag=-1;

    memset(s,0,sizeof(s));

    scanf("%d",&n);
    for (i=0;i!=n;++i)
        scanf("%s%d%d",s[i].name,&s[i].month,&s[i].day);

    qsort(s,n,sizeof(s[0]),cmp);

    for(i=0;i!=n;++i)
    {
        if (i!=n-1&&(s[i].month==s[i+1].month&&s[i].day==s[i+1].day)&&flag!=1)
        {
            printf("%d %d",s[i].month,s[i].day);
            flag=1;
        }

        if (flag==1)
            printf(" %s",s[i].name);

        if (i!=n-1&&(s[i].month!=s[i+1].month||s[i].day!=s[i+1].day)&&flag==1)
        {
            printf("\n");
            flag=0;
        }
    }

    if (flag==-1)
        printf("None\n");

    if (flag==1)
        printf("\n");

    return 0;
}

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-02-08 09:54
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:0 
回复 7楼 白衣柳相
上面两个都能AC~你得给双倍~~~

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-02-08 09:55
快速回复:题目如下:哪位可以帮忙用c写个正确代码给我参考下,不要c++!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.030319 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved