#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时出现了错误?
这题的主要问题在 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
//请按任意键继续. . .
出错?是报错还是输出错误?我这里看了,能输出的。输出:
15
45
75
4