排列问题-c语言代码实战
来源:互联网 发布:软件无线电 军用 编辑:程序博客网 时间:2024/06/03 18:47
#include <stdio.h>#include <stdlib.h>//用户随机输入4个0到9的整数(不全为0),计算这4个数字一共能组成多少个不同的4位数int main(){ int i[4];//用来接收用户提供的4个数 int n=0;//循环变量 int m=0;//数组中已经存在的4位数 int pd=0;//判断 int num[4*3*2];//4个元素排列最多就24种排列方式 int numd=0; int xhbl1=0,xhbl2=0,xhbl3=0,xhbl4=0;F1: for(n=0;n<4;n++){ printf("请输入第%d个数:",n+1); //接收用户输入并判断输入是否合法,如果非法则重新输入 do{ pd=scanf("%d",&i[n]); if (i[n]>9||pd==0||i[n]<0){ printf("输入非法!请重新输入:"); fflush(stdin);//清空缓存 } }while(i[n]>9||pd==0||i[n]<0); } if(i[0]==0&&i[1]==0&&i[2]==0&&i[3]==0){ system("cls");//清屏 printf("输入的4个值全为0,请重新输入!\n"); goto F1;//执行到这里说明4次输入全为0,要求重新输入 } //计算,将可能的值赋给num数组 xhbl1=0,xhbl2=0,xhbl3=0,xhbl4=0; for(xhbl1=0;xhbl1<4&&i[xhbl1]!=0;xhbl1++){//最高位不为0 for(xhbl2=0;xhbl2<4;xhbl2++){ if(xhbl1==xhbl2)continue;//第二位不与第一位取同一元素 for(xhbl3=0;xhbl3<4;xhbl3++){ if(xhbl3==xhbl1||xhbl3==xhbl2)continue;//第三位不与前2位取同一元素 for(xhbl4=0;xhbl4<4;xhbl4++){ if(xhbl4==xhbl1||xhbl4==xhbl2||xhbl4==xhbl3)continue;//第四位不与前3位取同一元素 numd=i[xhbl1]*1000+i[xhbl2]*100+i[xhbl3]*10+i[xhbl4];//完成组合,将组合后的数赋值给numd //比较 for(n=0;n<m&&m<=24&&m!=0;n++){ if(numd==num[n]){//如果查找到相同元素直接退出查找循环 break; } } if(n==m){//n==m说明没有重复(没有查找到重复) num[m]=numd;//将不重复的值赋值给num数组 m++;//记录数组中当前用多少个元素 } } } } } printf("一共有%d中组合方法.\n",m); for (n=0;n<m;n++){ printf("%d\t",num[n]); } return 0;}
用4层for循环完成4个元素的所有不重复排列,但用户有可能给出2个或多个相同的元素,从而造成排列结果的重复,所以采用了一个数组来接收所以的组合,每次新组合一个数就和已经得到的组合比较,排除重复的组合.
阅读全文
0 0
- 排列问题-c语言代码实战
- c语言递归全排列问题
- 进制转换-c语言代码实战
- C语言全排列
- C语言 全排列
- 【C语言训练】排列
- 约瑟夫问题 C语言代码
- c语言各类问题 代码
- 全排列问题(c语言程序实现)
- 全排列问题(c语言实现)回溯法 排列树
- 全排列C语言实现
- C语言实现全排列
- C语言实现全排列
- YTUOJ-C语言实验-排列
- c语言方块排列游戏
- C语言实现全排列
- C/C++:全排列问题
- C语言:伯努利-欧拉装错信封问题的C语言代码
- Todo List
- 分享前端面试中被问到的几个问题
- JAVA基础--关于Socket编程中的I/O阻塞
- 1031. 查验身份证(15) PAT乙级真题
- map
- 排列问题-c语言代码实战
- MyEclipse下Maven的安装配置
- [bzoj1019]:[SHOI2008]汉诺塔
- 【贪心算法】田忌赛马问题代码和注释
- 二叉树的应用——表达式树的原理分析与实现(Java语言)
- http://www.cnblogs.com/hadoop-dev/p/6908660.html
- Linux下Tomcat调优实战
- win系统下nodejs安装及环境配置
- UDOO NEO,NXP imx6 linux 开发板,上电开机