题目:有1、2、3、4这4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
思路:1、2、3、4能组成无重复数字的三位数最小是123,最大是432,根据这个,设计一个for循环,最小是123,最大是432,在循环中,计算出这个当前数字的个位、十位和百位数字都是什么,用if进行筛选,选出个位十位百位这三个数字不相等的数字,再选出这3个数字都小于4的数字。
方法一:
1234567891011121314151617181920 | int main() { int i = 0; int a=0,b=0,c=0,count=0; for (i=123; i<=432; i++) { a = i % 10;//取这个数字的各位 c = i / 100;//计算出这个数字的百位 b = ( i - ( c * 100 )) / 10;//计算这个数字的十位 if (a!=b && a != c && b != c)//首先,a,b,c三个数字不相等 { if (a <= 4 && b <= 4 && c <=4 && a != 0 && b != 0 && c != 0)//其次,a,b,c三个数字都必须小于等于4且大于0 { printf("%d ",i); count++;//计次 } } } printf("\nCount = %d\n",count); return 0;} |
输出的结果是:
12 | 123 124 132 134 142 143 213 214 231 234 241 243 312 314 321 324 341 342 412 413 421 423 431 432 Count = 24 |
方法二:
12345678910111213141516171819202122 | int main(){ int a,b,c; int count = 0; for (a=1; a<=4; a++) //先用三个for循环获得这4个数字组成的3位数的所有组和 { for (b=1; b<=4; b++) { for (c=1; c<=4; c++) { if (a != b && a != c && b != c) //在这4个数的组合中筛选各不相等的 { printf("%d%d%d ",a,b,c); count++; } } } } printf("\nCount = %d\n",count); return 0;} |
结果:
12 | 123 124 132 134 142 143 213 214 231 234 241 243 312 314 321 324 341 342 412 413 421 423 431 432 Count = 24 |