C++。贪心算法。出错。
看代码不知道C++怎么改
请问这里该怎么改呢?
#include
using namespace std;
int main()
{
int n,s;
cin>>n>>s;
int a[n];
for(int i = 0;i < n;i++)
cin>>a[i];
sort(a,a+n);
int sum = 0;
int t[s] = {0};
for(int i = 0;i < n;i++)
{
t[i%s]=t[i%s]+a[i];
sum += t[i%s];
}
sort(t,t+s);
printf("%.2f\n",sum*1.0/n);
return 0;
}
int t[s]改为int t[1000]这样子试试吧
该回答引用GPTᴼᴾᴱᴺᴬᴵ
在这个代码中,数组t的大小为s,但是在for循环中访问了t的第i%s个元素,可能会超出t的有效下标范围,导致程序崩溃或者结果不正确。可以修改t的大小为n,这样就可以保证t的每个元素都会被访问到。同时,为了保证t中存储的元素不溢出,可以在t数组初始化时全部赋值为0。
修改后的代码如下:
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n,s;
cin>>n>>s;
int a[n];
for(int i = 0;i < n;i++)
cin>>a[i];
sort(a,a+n);
int sum = 0;
int t[n] = {0};
for(int i = 0;i < n;i++)
{
t[i%s]=t[i%s]+a[i];
sum += t[i%s];
}
sort(t,t+s);
printf("%.2f\n",sum*1.0/n);
return 0;
}
该回答引用ChatGPT
int a[n]这是错误的,如果是OJ会提示数组越界,应该为 int a[10000];,而且数组应放在using namespace std;前,望采纳
#include<bits/stdc++.h>
using namespace std;
int a[10000];
int main()
{
int n,s;
cin>>n>>s;
for(int i = 0;i < n;i++)
cin>>a[i];
sort(a,a+n);
int sum = 0;
int t[10000] = {0};
for(int i = 0;i < n;i++)
{
t[i%s]=t[i%s]+a[i];
sum += t[i%s];
}
sort(t,t+s);
printf("%.2f\n",sum*1.0/n);
return 0;
}