鱼C论坛

 找回密码
 立即注册
查看: 1500|回复: 6

[已解决]有1,2,3,4个数字,能组成多少个互不相同无重复的三位数?都是多少?

[复制链接]
发表于 2020-12-5 22:23:59 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
求代码、解释、思路。
最佳答案
2020-12-6 00:23:59
思路看注释

  1. // 有1,2,3,4个数字,能组成多少个互不相同无重复的三位数?都是多少?
  2. #include<stdio.h>
  3. int main()
  4. {
  5.         int i, j, k, m, count = 0;
  6.         for (i = 1;i <= 4;i++)                       // i 百位上的取值
  7.         {
  8.                 for (j = 1;j <= 4;j++)                   // i 十位上的取值
  9.                 {
  10.                         for (k = 1;k <= 4;k++)               // k 个位上的取值
  11.                         {
  12.                                 if (i != j && j != k && k != i)  // 确保 i、j、k 不重复
  13.                                 {
  14.                                         m = 100 * i + 10 * j + k;    // 进一步限制 i、j、k 在其应该在的位置上
  15.                                         printf("%d ", m);            // 输出组成的三位数
  16.                                         count += 1;                  // 统计有多少个三位数
  17.                                 }
  18.                         }
  19.                 }
  20.         }
  21.         printf("\n");
  22.         printf("如上输出,能组成 %d 个无重复的三位数", count);
  23.         printf("\n");

  24. }
复制代码

本帖被以下淘专辑推荐:

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-12-5 22:43:58 | 显示全部楼层
  1. count = 0
  2. for i in range(1,5):
  3.     for j in range(1,5):
  4.         for k in range(1,5):
  5.             if i!=j and i!=k and j!=k:
  6.                 print(i*100+j*10+k)
  7.                 count +=1

  8. print("一共%d个数"%count)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-5 22:46:37 | 显示全部楼层
  1. #include <stdio.h>

  2. int main(void)
  3. {
  4.         int d , e , i , j , k                                   ;
  5.         for(e = 0 , i = 1 ; i < 5 ; i ++) {
  6.                 for(j = 1 ; j < 5 ; j ++) {
  7.                         for(k = 1 ; k < 5 ; k ++) {
  8.                                if(i != j && k != i && k != j) {
  9.                                        d = i * 100 + j * 10 + k ;
  10.                                        if(e) printf("\t")       ;
  11.                                        printf("%d" , d)         ;
  12.                                        e ++                     ;
  13.                                }
  14.                         }
  15.                 }  
  16.         }
  17. }
复制代码

        编译、运行实况
  1. D:\00.Excise\C>g++ -o x x.c

  2. D:\00.Excise\C>x
  3. 123     124     132     134     142     143     213     214     231     234
  4. 241     243     312     314     321     324     341     342     412     413
  5. 421     423     431     432
  6. D:\00.Excise\C>
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-5 22:46:49 | 显示全部楼层
本帖最后由 昨非 于 2020-12-5 22:47 编辑

解释:
count用于计数

由4个数组成,所以依次遍历1到4,
拼成三位数,所以三层循环
三位数各不相同,所以加了if判断条件

输出时再将各位数字拼到一起,并计数加一


测试结果

  1. 123
  2. 124
  3. 132
  4. 134
  5. 142
  6. 143
  7. 213
  8. 214
  9. 231
  10. 234
  11. 241
  12. 243
  13. 312
  14. 314
  15. 321
  16. 324
  17. 341
  18. 342
  19. 412
  20. 413
  21. 421
  22. 423
  23. 431
  24. 432
  25. 一共24个数
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-5 23:54:37 | 显示全部楼层
今天的帖子没有回答够,我也来凑个热闹。一会将程序发过来
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-6 00:23:59 | 显示全部楼层    本楼为最佳答案   
思路看注释

  1. // 有1,2,3,4个数字,能组成多少个互不相同无重复的三位数?都是多少?
  2. #include<stdio.h>
  3. int main()
  4. {
  5.         int i, j, k, m, count = 0;
  6.         for (i = 1;i <= 4;i++)                       // i 百位上的取值
  7.         {
  8.                 for (j = 1;j <= 4;j++)                   // i 十位上的取值
  9.                 {
  10.                         for (k = 1;k <= 4;k++)               // k 个位上的取值
  11.                         {
  12.                                 if (i != j && j != k && k != i)  // 确保 i、j、k 不重复
  13.                                 {
  14.                                         m = 100 * i + 10 * j + k;    // 进一步限制 i、j、k 在其应该在的位置上
  15.                                         printf("%d ", m);            // 输出组成的三位数
  16.                                         count += 1;                  // 统计有多少个三位数
  17.                                 }
  18.                         }
  19.                 }
  20.         }
  21.         printf("\n");
  22.         printf("如上输出,能组成 %d 个无重复的三位数", count);
  23.         printf("\n");

  24. }
复制代码
无重复的三位数.jpg
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-6 20:48:46 | 显示全部楼层
  1. #include<stdio.h>
  2. int main() {
  3.         int i=1, j=1, k=1;
  4.         for (i = 1; i <= 4 ; i++) {
  5.                 for (j = 1; j <= 4 ; j++) {
  6.                         for (k = 1; k <= 4 ; k++) {
  7.                                 if (i != j && i != k && j != k) {
  8.                                         printf("%d,%d,%d\n", i, j, k);
  9.                                 }
  10.                         }
  11.                 }
  12.         }
  13. }
复制代码


就是一个嵌套for 的嵌套。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-5-8 21:05

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表