
max的意思是相加的4个数里面最大的数,怎么用c++实现求出可能的几组数?难道要10层循环吗?哦对了所有的未知数范围是0-150的整数

如果用循环,取4个数只需要4个for循环。
测试代码如下:
参考链接:
https://blog.csdn.net/m0_51641706/article/details/119186869
https://c.biancheng.net/c/rand.html
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
int main(void){
//int arr[10]={1,2,4,4,4,1,2,3,4,4};
int arr[10];
int i,j,k,p,max,ce=0;
// https://blog.csdn.net/m0_51641706/article/details/119186869
// https://c.biancheng.net/c/rand.html
srand((unsigned int)time(NULL));
// 产生10个范围在0到150之间的随机整数,依次存放到数组arr中
for(i=0;i<10;i++){
arr[i]=rand()%151;
}
printf("产生的随机数为:\n");
for(i=0;i<10;i++){
printf("%d ",arr[i]);
}
printf("\n\n");
max=0;
// 寻找4个数的和的最大值
for(i=0;i<7;i++){ //为防止重复组合取数,将第一个数取第1个到第7个之间的数
for(j=i+1;j<8;j++){ // 第二个数去取第2到第8个之间的数,并取第一个数后面的数
for(k=j+1;k<9;k++){ // 第三个数去取第3到第9个之间的数,并取第二个数后面的数
for(p=k+1;p<10;p++){ // 第四个数去取第4到第10个之间的数,并取第三个数后面的数
if(
// (i!=j&&i!=k&&i!=p)
// &&
// (j!=k&&j!=p)
// &&
// (k!=p)
// &&
(arr[i]+arr[j]+arr[k]+arr[p]>max)
){
max=arr[i]+arr[j]+arr[k]+arr[p];
}
}
}
}
}
printf("4个数和最大为:%d\n",max);
printf("\n和最大的组合有:\n");
// 打印4个数和最大的组合
for(i=0;i<7;i++){
for(j=i+1;j<8;j++){
for(k=j+1;k<9;k++){
for(p=k+1;p<10;p++){
if(
// (i!=j&&i!=k&&i!=p)
// &&
// (j!=k&&j!=p)
// &&
// (k!=p)
// &&
(arr[i]+arr[j]+arr[k]+arr[p]==max)
){
printf("%3d %3d %3d %3d\n",arr[i],arr[j],arr[k],arr[p]);
}
}
}
}
}
return 0;
}
