C语言中组成不重复的三位数问题
吧唧吧唧orz 人气:0C语言组成不重复的三位数
对于这个问题,我有两种解决思路
- 第一种较为简单
- 第二种较为复杂
(1)通用思路:根据数组中的数字自由组合成三位数
(2)找出最小数和最大数并以此为循环边界(目的在于缩小循环的范围,提高效率),之后根据不断循环,将不符合要求的数字排除,在某些题中会简便许多
·由1,2,3,4组成的不重复的三位数
(1)通用思路
#include <stdio.h> int main() { int a[4]={1,2,3,4}; int i,j,k,count=0; for (i=0;i<4;i++) { for (j=0;j<4;j++) { for (k=0;k<4;k++) if (i!=j&&i!=k&&k!=j) printf("%d\n",a[i]*100+a[j]*10+a[k]); } } return 0; }
(2)排除思路
#include <stdio.h> int main() { int a[3],i,j,k; for (i=123;i<=432;i++) { int word = 1; a[0]=i%10;a[1]=i/10%10;a[2]=i/100; for (j=0;j<3;j++) { if (a[j]==1||a[j]==2||a[j]==3||a[j]==4) { for (k=0;k<3&&j!=k;k++) { if (a[k]==a[j]) { word = 0; break; } } } else { word = 0; break; } if (word == 0) break; } if (word) printf("%d\n",i); } return 0; }
·某些题(适用于排除思路)
用1,2,3,.....,9组成三位数abc,def,ghi,每个数字恰好使用一次,要求 abc:def:ghi=1:2:3.按照“abc def ghi”的格式输出所有解,每行一个解。
#include <stdio.h> int main() { int abc,def,ghi; int i,k,a[9],word =1; for (abc=123;abc<=329;abc++) { def = abc * 2; ghi = abc * 3; a[0]=abc%10;a[1]=abc/10%10;a[2]=abc/100; a[3]=def%10;a[4]=def/10%10;a[5]=def/100; a[6]=ghi%10;a[7]=ghi/10%10;a[8]=ghi/100; for (k=0;k<9;k++) { word = 1; for (i=0;i<9&&i!=k;i++) { if (a[k]==a[i]||a[i]==0) { word = 0; break; } } if (word == 0) break; } if (word) printf("%d,%d,%d\n",abc,def,ghi); } }
打印1234组成的不重复三位数
1、每位数都遍历一次,就是个位出现1234,十位出现1234,百位出现1234
2、去重复,个位十位百位不能相等
3、复合式遍历,统计这种遍历得到了多少回
var count = 0; for(i=1;i<=4;i++){ for(j=1;j<=4;j++){ for(k=1;k<=4;k++){ if(i!=j && j!=k && k!=i){ count++; console.log(i+""+j+""+k); } } } } console.log("这样的三位数有"+count+"个");
以上为个人经验,希望能给大家一个参考,也希望大家多多支持。
加载全部内容