鱼C论坛

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

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

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

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

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

x
求代码、解释、思路。
最佳答案
2020-12-6 00:23:59
思路看注释
// 有1,2,3,4个数字,能组成多少个互不相同无重复的三位数?都是多少?
#include<stdio.h>
int main()
{
        int i, j, k, m, count = 0;
        for (i = 1;i <= 4;i++)                       // i 百位上的取值
        {
                for (j = 1;j <= 4;j++)                   // i 十位上的取值
                {
                        for (k = 1;k <= 4;k++)               // k 个位上的取值
                        {
                                if (i != j && j != k && k != i)  // 确保 i、j、k 不重复
                                {
                                        m = 100 * i + 10 * j + k;    // 进一步限制 i、j、k 在其应该在的位置上
                                        printf("%d ", m);            // 输出组成的三位数
                                        count += 1;                  // 统计有多少个三位数
                                }
                        }
                }
        }
        printf("\n");
        printf("如上输出,能组成 %d 个无重复的三位数", count);
        printf("\n");

}

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

print("一共%d个数"%count)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

int main(void)
{
        int d , e , i , j , k                                   ;
        for(e = 0 , i = 1 ; i < 5 ; i ++) {
                for(j = 1 ; j < 5 ; j ++) {
                        for(k = 1 ; k < 5 ; k ++) {
                               if(i != j && k != i && k != j) {
                                       d = i * 100 + j * 10 + k ;
                                       if(e) printf("\t")       ;
                                       printf("%d" , d)         ;
                                       e ++                     ;
                               }
                        }
                }  
        } 
}
        编译、运行实况
D:\00.Excise\C>g++ -o x x.c

D:\00.Excise\C>x
123     124     132     134     142     143     213     214     231     234
241     243     312     314     321     324     341     342     412     413
421     423     431     432
D:\00.Excise\C>
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

解释:
count用于计数

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

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


测试结果
123
124
132
134
142
143
213
214
231
234
241
243
312
314
321
324
341
342
412
413
421
423
431
432
一共24个数
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-5 23:54:37 | 显示全部楼层
今天的帖子没有回答够,我也来凑个热闹。一会将程序发过来
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-6 00:23:59 | 显示全部楼层    本楼为最佳答案   
思路看注释
// 有1,2,3,4个数字,能组成多少个互不相同无重复的三位数?都是多少?
#include<stdio.h>
int main()
{
        int i, j, k, m, count = 0;
        for (i = 1;i <= 4;i++)                       // i 百位上的取值
        {
                for (j = 1;j <= 4;j++)                   // i 十位上的取值
                {
                        for (k = 1;k <= 4;k++)               // k 个位上的取值
                        {
                                if (i != j && j != k && k != i)  // 确保 i、j、k 不重复
                                {
                                        m = 100 * i + 10 * j + k;    // 进一步限制 i、j、k 在其应该在的位置上
                                        printf("%d ", m);            // 输出组成的三位数
                                        count += 1;                  // 统计有多少个三位数
                                }
                        }
                }
        }
        printf("\n");
        printf("如上输出,能组成 %d 个无重复的三位数", count);
        printf("\n");

}
无重复的三位数.jpg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-6 20:48:46 | 显示全部楼层
#include<stdio.h>
int main() {
        int i=1, j=1, k=1;
        for (i = 1; i <= 4 ; i++) {
                for (j = 1; j <= 4 ; j++) {
                        for (k = 1; k <= 4 ; k++) {
                                if (i != j && i != k && j != k) {
                                        printf("%d,%d,%d\n", i, j, k);
                                }
                        }
                }
        }
}

就是一个嵌套for 的嵌套。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-12 12:00

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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