Cons. Marx 2021-08-24 17:40 采纳率: 92.3%
浏览 39
已结题

关于结构体数组的相关问题

img
img



#include<iostream>
using namespace std;

class moon{
    public:
    double s;
    double p;
    double i;
};

struct sumdata{
    double sum;
};

struct pricedata{
    double price;
};
//10 20
//18 15 10 12 13 1 2 3 4 5
//75 72 45 1  2  3 4 5 6 7
//4  5  4.5 
//每个输入包含一个测试用例。
//每个测试用例先给出一个不超过 1000 的正整数 N 表示月饼的种类数、
//以及不超过 500(以万吨为单位)的正整数 D 表示市场最大需求量。
//随后一行给出 N 个正数表示每种月饼的库存量(以万吨为单位);
//最后一行给出 N 个正数表示每种月饼的总售价(以亿元为单位)。
//数字间以空格分隔。
//N D
//S1 S2 S3 SN
//P1 P2 P3 PN
int main()
{
    int N,D;
    cin>>N>>D;
    class moon M[N];
    sumdata S[N];
    pricedata P[N];
    for(int i=0;i<N;i++)
    {
        cin>>S[i].sum;
    }
    for(int i=0;i<N;i++)
    {
        cin>>P[i].price;
    }
    for(int i=0;i<N;i++)
    {
        M[i].s = S[i].sum;
        M[i].p = P[i].price;
        M[i].i = M[i].p / M[i].s;
    }
    for(int i=0;i<N;i++)//对结构体数组进行冒泡排序,大的在前,小的在后 
    {
        for(int j=0;j<N-i;j++)
        {
            if(M[i].i<M[i+1].i)
            {
                double sum,price,ind;
                sum = M[i].s;
                price = M[i].p;
                ind = M[i].i;
                M[i].s = M[i+1].s;
                M[i].p = M[i+1].p;
                M[i].i = M[i+1].i;
                M[i+1].s = sum;
                M[i+1].p = price;
                M[i+1].i = ind;
            }
        }
    }
    cout<<M[1].s<<endl;//输出第二个大的 
    cout<<M[1].p<<endl;
    cout<<M[N-1].s<<endl;//输出最后一个小的,(数组长度为N,所以最后一个下标为N-1} 
    cout<<M[N-1].p<<endl;
}


想问一下,为什么长度为N的结构体数组,输出下标为N-1时出现了错误?

  • 写回答

2条回答 默认 最新

  • qzjhjxj 2021-08-24 20:35
    关注

    这题的主要问题在 class moon; 类里定义了元素 i ,然后在后面的代码里又将 i 定义成for()循环里的自变量,然后就乱了,出现莫名其妙的现象,修改如下,供参考:

    #include<iostream>
    using namespace std;
    class moon{
        public:
        double s;
        double p;
        double i;
    };
    struct sumdata{
        double sum;
    };
    struct pricedata{
        double price;
    };
    //10 20
    //18 15 10 12 13 1 2 3 4 5
    //75 72 45 1  2  3 4 5 6 7
    //4  5  4.5
    //每个输入包含一个测试用例。
    //每个测试用例先给出一个不超过 1000 的正整数 N 表示月饼的种类数、
    //以及不超过 500(以万吨为单位)的正整数 D 表示市场最大需求量。
    //随后一行给出 N 个正数表示每种月饼的库存量(以万吨为单位);
    //最后一行给出 N 个正数表示每种月饼的总售价(以亿元为单位)。
    //数字间以空格分隔。
    //N D
    //S1 S2 S3 SN
    //P1 P2 P3 PN
    int main()
    {
     int N=10,D=20;
        cin>>N>>D;
        class moon M[N];
        sumdata S[N];
        pricedata P[N];
        for(int i=0;i<N;i++)
        {
            cin>>S[i].sum;
        }
        for(int i=0;i<N;i++)
        {
            cin>>P[i].price;
        }
        for(int k=0;k<N;k++)
        {
            M[k].s = S[k].sum;
            M[k].p = P[k].price;
            M[k].i = M[k].p / M[k].s;
        }
        for(int k=0;k<N-1;k++)//对结构体数组进行冒泡排序,大的在前,小的在后
        {
            for(int j=0;j<N-k-1;j++)
            {
                if(M[j].i<M[j+1].i)
                {
                    double sum,price,ind;
                    sum = M[j].s;
                    price = M[j].p;
                    ind = M[j].i;
                    M[j].s = M[j+1].s;
                    M[j].p = M[j+1].p;
                    M[j].i = M[j+1].i;
                    M[j+1].s = sum;
                    M[j+1].p = price;
                    M[j+1].i = ind;
                }
            }
        }
        cout<<M[1].s<<endl;//输出第二个大的
        cout<<M[1].p<<endl;
        cout<<M[N-1].s<<endl;//输出最后一个小的,(数组长度为N,所以最后一个下标为N-1}
        cout<<M[N-1].p<<endl;
        system("pause");
    }
    
    //10 20
    //18 15 10 12 13 1 2 3 4 5
    //75 72 45 1 2 3 4 5 6 7
    //k=0,M[0].s=18.000000,M[0].p=75.000000,M[0].i=4.166667
    //k=1,M[1].s=15.000000,M[1].p=72.000000,M[1].i=4.800000
    //k=2,M[2].s=10.000000,M[2].p=45.000000,M[2].i=4.500000
    //k=3,M[3].s=12.000000,M[3].p=1.000000,M[3].i=0.083333
    //k=4,M[4].s=13.000000,M[4].p=2.000000,M[4].i=0.153846
    //k=5,M[5].s=1.000000,M[5].p=3.000000,M[5].i=3.000000
    //k=6,M[6].s=2.000000,M[6].p=4.000000,M[6].i=2.000000
    //k=7,M[7].s=3.000000,M[7].p=5.000000,M[7].i=1.666667
    //k=8,M[8].s=4.000000,M[8].p=6.000000,M[8].i=1.500000
    //k=9,M[9].s=5.000000,M[9].p=7.000000,M[9].i=1.400000
    
    //10
    //45
    //12
    //1
    //请按任意键继续. . .
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 9月1日
  • 已采纳回答 8月24日
  • 修改了问题 8月24日
  • 修改了问题 8月24日
  • 展开全部

悬赏问题

  • ¥50 安装pyaudiokits失败
  • ¥15 计组这些题应该咋做呀
  • ¥60 更换迈创SOL6M4AE卡的时候,驱动要重新装才能使用,怎么解决?
  • ¥15 让node服务器有自动加载文件的功能
  • ¥15 jmeter脚本回放有的是对的有的是错的
  • ¥15 r语言蛋白组学相关问题
  • ¥15 Python时间序列如何拟合疏系数模型
  • ¥15 求学软件的前人们指明方向🥺
  • ¥50 如何增强飞上天的树莓派的热点信号强度,以使得笔记本可以在地面实现远程桌面连接
  • ¥20 双层网络上信息-疾病传播