为什么用vector复制输入的值结果是错的, #include<iostream> #include<algorithm> #include<vector> using namespace std; int main() { int n; int sum = 0; cin >> n; int a[105]={0}; /*int min[105]={0};*/ vector<int>min(n + 5); for (int i = 1; i <= n; i++) { cin >> a[i]; min[i] = a[i]; } sort(min.begin(), min.end()); /* sort(min, min + n + 1);*/ for (int i = 1; i < n ; i++) { int iter; for (iter = 1; iter <= n; iter++) { if (a[iter] == min[i]) break; } int pre = iter - 1, next = iter + 1;
说说我的想法: 其实根据那个例子可以看到,4个数字分别是2,3,5,10,最大就是10*2*3+10*3*5+10*5*10 规律就是想要得到最大能量,就要每次都有最大的数参与相乘,每次逐步消去剩下的数中最小的 所以我想到的就是用冒泡先把数据从小到大排序一遍,依次放在一个数组num[]里面,这样数的大小就都排号好了,然后取出数组的最后一个也就是最大的一个数10乘数组num[0]也就是2再乘num[1]也就是3,就是数组里的元素看作是i,也就是每次都是乘num[i]乘num[i+1], 代码如下,运行结果正确,但提交答案上去,说我答案错误 #include<iostream> using namespace std; int main() { int i,N,E=0,num[N],temp; cin>>N; for(i=0;i<N;i++){ cin>>num[i]; } for(i=0;i<N-1;i++){ for(int j=0;j<N-i-1;j++) { if(num[j]>num[j+1]) { temp=num[j]; num[j]=num[j+1]; num[j+1]=temp; } } } for(i=0;i<N-1;i++) { E=E+num[N-1]*num[i]*n
李2912 2021-03-06 21:17:00 |
(接上) } cout<<E; }
好吃的蚂蚱 2021-05-19 22:58:07 |
不一样的,我是每次求最小,把最小的吞了,那么此时不用关注最小的珠子前后的数字,但是你求最大的就要关注是往左边吞还是往右边吞。 举个例子, 2 3 10 4 1;你要10参与运算,那第一次就是2*3*10或者10*4*1,假如吞掉4,那最小的数字1之后还要参与一次计算,最坏的可能是每次都有1参与计算,得出来的值就很小。
好吃的蚂蚱 2021-05-19 23:00:31 |
@13539572912 然后就是你中间用了冒泡排序吧,但是这个是不能排序的T T,他的答案和珠子的顺序有关系
火狐狸 2022-10-01 11:22:53 |
其实我也以为一定要最大的参与才能得到最优,但是楼主给的这个例字就是不能从6开始,所以我从第50个答案开始就错了
为什么输入4 2 5 3 10出来不是710呢
A+B for Input-Output Practice (VI) (C++代码)浏览:445 |
C语言程序设计教程(第三版)课后习题11.3 (C语言代码)浏览:1071 |
大小写转换 (C语言代码)浏览:904 |
WU-格式化数据输出 (C++代码)浏览:1313 |
2005年春浙江省计算机等级考试二级C 编程题(2) (C语言代码)浏览:636 |
A+B for Input-Output Practice (I) (C语言代码)浏览:451 |
幸运数 (C++代码)浏览:2983 |
简单的a+b (C语言代码)浏览:538 |
C语言程序设计教程(第三版)课后习题8.4 (C++代码)浏览:472 |
循环链表与单个结点删除浏览:1115 |