C语言解决排列组合问题 请高手指教

数组a[10]为固定值,一共10个数字,每个元素的值分别为1,1,1,2,2,4,5,3,4,2,另有三个不相关的变量值2,3,4 ,这三个数字以任意的排列组合加到数组a的某一个或几个元素中(可以全部加到a[1]上,也可以加到a[2],a[3],a[8]上 随意加的),这三个变量只能加一次,得到一个新的数组b,当b组中有3个数值大于6时,输出该数组,求出所有的满足这个条件的数组b。

#include<stdio.h>
/*
数组a[10]为固定值,一共10个数字,每个元素的值分别为1,1,1,2,2,4,5,3,4,2,
另有三个不相关的变量值2,3,4 ,这三个数字以任意的排列组合加到数组a的某一个
或几个元素中(可以全部加到a[1]上,也可以加到a[2],a[3],a[8]上 随意加的),
这三个变量只能加一次,得到一个新的数组b,当b组中有3个数值大于6时,输出该数组,
求出所有的满足这个条件的数组b。
*/
int main()
{
int a[10]={1,1,1,2,2,4,5,3,4,2};
int b[10];
int i,j,k,t,count;
int x2=2,x3=3,x4=4;
for(i=0;i<10;i++)
{
for(j=0;j<10;j++)
{
for(k=0;k<10;k++)
{
for(t=0;t<10;t++)
b[t]=a[t];

b[i]=b[i]+x2;
b[j]=b[j]+x3;
b[k]=b[k]+x4;

//下面遍历数组,对大于6的元素进行计数
count=0;
for(t=0;t<10;t++)
{
if(b[t]>6) count++;
}
if(count>=3)
{
for(t=0;t<10;t++)
printf("%d ",b[t]);
printf("\n");
}
}
}
}//3个数加到一个有10个元素的数组中的所有可能
return 0;
}
温馨提示:内容为网友见解,仅供参考
第1个回答  2012-04-01
这三个变量每个都有10种选择,所有三重循环i, j, k,每个循环从0到9(当然,如果你要考虑可扩展性,比如4个变量,5个变量等等,也可以写成递归),循环最内部把a[i],a[j],a[k]分别加上2,3,4,然后判断结果是否满足某个条件,满足则打印,否则回滚以上操作(也即a[i],a[j],a[k]分别减去2,3,4),继续下一次循环

C语言解决排列组合问题 请高手指教
include<stdio.h> \/ 数组a[10]为固定值,一共10个数字,每个元素的值分别为1,1,1,2,2,4,5,3,4,2,另有三个不相关的变量值2,3,4 ,这三个数字以任意的排列组合加到数组a的某一个 或几个元素中(可以全部加到a[1]上,也可以加到a[2],a[3],a[8]上 随意加的),这三个变量...

C语言排列组合问题 求高手
scanf("%d,%d",&m,&n);并且如果两个%d之间用逗号分隔,那么在输入数字时两个数字之间也要用逗号分隔

求助C语言关于排列组合的程序
if (n > 1){ \/* 进入下一次更小的组合问题 *\/ combination( i - 1, n - 1);}else{ \/* 满了需要的组合数,输出 *\/ for (j = comb[0]; j > 0; j--){ printf("%c", comb[j]);} printf(" \\n");} } return;} int main(int argc, char *argv[]){ \/\/ 从15个不...

C语言 排列和组合的问题。
排列组合啊!include<stdio.h> void main ( ){ int i,a[5]={12,34,2,45,56},n=5;void array(int[],int n); \/*函数说明*\/ arry(a,n);\/*函数调用*\/ for(i=0;i<5;i++) printf("%d",a[i]);\/*输出排完序的序列*\/ } void array (int b[],int n)\/*调用的函...

C语言中的排列组合问题;
f(m, n)表示m个黑球n个白球的排法,那好。假如这个问题给你了,你会这样想:1、我先把第一位放黑球,那么后面的排法有多少种:当然是f(m - 1, n)种,因为少了一个黑球。2、同理,我先放白球,那么有f(m, n - 1)种。总共就有f(m-1,n)+f(m,n-1)种,后面就递归了。但不能...

利用C语言排列组合问题
char color[][4]={"红","白","蓝","绿","黄","黑","白"};void find(int m,int n);int main(void) { find(6,3);find(6,4);\/\/system("pause");return 0;} void find(int m,int n){ int *set=new int[m];int i,position;for(i = 0; i < m; i++)set[i] = ...

排列组合 C语言的问题 请高手指教
3个数字都加到a的某一个元素中(都是同一个,那还有排列还有什么意义)?排列组合的概念搞懂没?排列就是排列,组合就是组合,是两个不同的概念啊。例如1 2 3排列有3!,组合就只有1了。

排列组合问题 用C语言解决的
using namespace std;define iCount 10 int iv_Num[iCount];float fDebug;void algorithm(int iNum[iCount], int iNow);bool judge(int iNum[iCount]);void Sort(int iNum[iCount]);void main(){ for(int i=0;i<iCount;i++)iv_Num[i]=0;fDebug = 0;algorithm(iv_Num, 0);cout...

C语言编程排列组合问题。本人初学,简单为好!
bool used[100];void DFS(int deep,int n){ int i;if(deep==n){ for(i=0;i<n;i++){ if(i)putchar(' ');printf("%d",a[i]);} puts("");return ;} for(i=1;i<=n;i++){ if(used[i])continue;used[i]=true;a[deep]=i;DFS(deep+1,n);used[i]=false;} } int...

C语言 排列组合的问题
int arr[3][2], index[3], count;void put(int idx){ int i;if(idx == 7){ ++count;for(i=0; i<3; ++i)printf("(%d,%d) ", arr[i][0], arr[i][1]);putchar('\\n');return;} for(i=0; i<3; ++i)if(index[i]<2){ arr[i][index[i]++] = idx;put(idx+1...

相似回答