大吱佬 2021-01-30 21:45 采纳率: 0%
浏览 40

关于c/c++的struct中不声明出现错误的情况

在写CCF的201503-2 数字排序发现的

原始代码

struct X //定义一个新的类型
{
    int data;
    int num;
};

修改代码

struct X //定义一个新的类型
{
    int data=0;
    int num=0;
};

在codeblock前后输出结果都是一样的,但是CCF提交以后原始代码出错误,一定要声明吗,可是为什么呢

  • 写回答

3条回答 默认 最新

  • 大吱佬 2021-01-30 21:45
    关注

    #include <iostream>
    using namespace std;
    struct X //定义一个新的类型
    {
        int data=0;
        int num=0;
    };
    int main()
    {
        int n;
        cin>>n;
        int i,j,m=0;
        int a;
        struct X x[1000];
        cin>>x[0].data;
        int flag=0;
        for(i=1; i<n; i++)
        {
            flag=0;
            cin>>a;
            for(j=0; j<=i; j++)
            {
                if(x[j].data==a) //存在
                {
                    x[j].num++;
                    flag=1;
                    break;
                }//计数+1
            }
            if(flag==0)
                x[++m].data=a;
        }
        int num=x[0].num;
        int data=x[0].data;
        for(i=0; i<=m; i++)
        {
            for(j=0; j<m-i; j++)
            {
                if(x[j].num>x[j+1].num)
                {
                    data=x[j].data;
                    num=x[j].num;
                    x[j].data=x[j+1].data;
                    x[j].num=x[j+1].num;
                    x[j+1].data=data;
                    x[j+1].num=num;

                }
            }
        }
       for(i=0; i<=m; i++)
        {
            for(j=0; j<m-i; j++)
            {
                if(x[j].data<x[j+1].data&&x[j].num==x[j+1].num)
                {
                    data=x[j].data;
                    num=x[j].num;
                    x[j].data=x[j+1].data;
                    x[j].num=x[j+1].num;
                    x[j+1].data=data;
                    x[j+1].num=num;
                }
            }
        }
        for(i=m; i>=0; i--)
        {
            cout<<x[i].data<<" "<<x[i].num+1<<endl;
        }
        return 0;
    }
     

    评论

报告相同问题?