这个问题其实就是考你数组和排序,其使用枚举算法就能很快解决,就是会出一点小问题。以下是我的代码:
#include <iostream>
using namespace std;
int n,x,ai[106]; //全局变量:店铺数量,钱的数量,每个店铺的初始价格
void putin(){ //输入部分函数,无返回值
cin >> n >> x;
for (int i = 0;i < n;i ++){
cin >> ai[i];
}
}
int paixu(int s[106],int y){ //进行排序,返回值为最便宜店面的价格
int t;
for (int i = 0;i < y;i ++){
for (int j = 0;j < y - i;j ++){
if (s[j + 1] < s[j]){
t = s[j];
s[j] = s[j + 1];
s[j + 1] = t;
}
}
}
return s[1];
}
void zhuanhuan(int s[106],int y){
for (int i = 1;i < y;i ++){ //将s数组里面的内容装入全局数组ai中以便转换
ai[i] = s[i];
}
}
int buydiamond1(int an,int ax){ //购买函数1,返回值为能够购买的宝石数量diam
int list[an];
int diam = 0;
for (int i = 0;i < an;i ++){
list[i] = ai[i];
}
for (int i = 0;ax >= paixu(ai,an);i ++){
if (list[i] == paixu(ai,an)){
diam ++;
ax -= list[i];
list[i] *= 2;
zhuanhuan(list,an);
for (int i = 0;i < an;i ++){
ai[i] = list[i];
}
}
}
return diam;
}
int buydiamond2(int an,int ax){ //购买函数2,返回值为能够购买的宝石数量diam
int diam = 0;
for (int i = 0;ax >= paixu(ai,an);i ++){
if (ai[i] == paixu(ai,an)){
diam ++;
ax -= ai[i];
ai[i] *= 2;
}
}
return diam;
}
int main(){
int diam;
bool tof;
putin();
for (int i = 1;i < n;i ++){
if (ai[n - 1] == ai[n]) tof = false;
else tof = true;
}
if (tof){
diam = buydiamond1(n,x);
}
else{
diam = buydiamond2(n,x);
}
cout << diam;
return 0;
}
你看可以不?