#include <iostream>/*10个数,取5个,打印出所有可能的组合,假设不考虑重复数字*/const int L=10; //10个数字const int C=5;//选5个int *x;/*偏移数组,后一个数相对于前一个数偏移的距离,至少为1比如1,2,3选两个数可能的情况 对应的x数组1 2 0 11 3 0 22 3 1 1*/bool place(int k){//判断第k步,是否超界,所有的偏移距离之和要小于坐标上限L-1 int sum = 0; for(int i = 0;i <= k; i++) sum += x[i]; if(sum >= L) return false; else return true;}int main(){ x = new int[C]; int sum = 0;//总共的组合结果 int k=0;//步数 x[k] = -1; int a[L];//待选数 for(int i=0;i<L;i++){//初始化 a[i]=rand()%100; printf("%d ", a[i]); } printf("\n"); while(k >= 0){//如果回溯到-1步,说明回溯结束 x[k]++;//第k步偏移加1 if(place(k)){//如果没有超界 if(k == C-1){//如果已经选出了C个数,则打印,统计结果 int t = 0; for(int i = 0;i < C;i++){ t += x[i]; printf("%d ", a[t]); } printf("\n"); sum++; } else{//否则,则尝试下一步 k++; x[k] = 0; } }else//如果超界了,退回上一步 k--; } printf("总共组合数目%d\n", sum); delete []x;} <script type=text/javascript charset=utf-8 src="http://static.bshare.cn/b/buttonLite.js#style=-1&uuid=&pophcol=3&lang=zh"></script> <script type=text/javascript charset=utf-8 src="http://static.bshare.cn/b/bshareC0.js"></script> 阅读(1081) | 评论(0) | 转发(0) | 0 上一篇:再说链表逆序 下一篇:深信服笔试题 相关热门文章 超适用纵贯车推广技能_淘富阁...一些简单的shell脚本实例...淘宝网店推广思绪问题_淘富阁...公司历史沿革(1913-1924)家电...公司历史沿革(1878-1904)家电... test123编写安全代码——小心有符号数...使用openssl api进行加密解密...一段自己打印自己的c程序...sql relay的c++接口 ChinaUnix & ITPUB社区12周年...ssh连接出现以下提示,求解...如何扩展MYSQL准备做一个大型门户,用户什么...gbk or utf8 给主人留下些什么吧!~~ 评论热议