题目:
有 1,2,3,4 个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
解析:
分别得到 百位,十位,个位, 再使用 if 判断,不同则为结果
参考来源:
有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?用C语言实现_小宝宝编程的博客-CSDN博客_有1,2,3,4个数字,能组成多少个互不相同
答题:
一) 暴力解题:
#include <stdio.h>
int main(void)
{
int Hundred = 1; /* 百位变量 */
int TenDigits = 1; /* 十位变量 */
int Bit = 1; /* 个位 */
int Sum = 0; /* 一共有多少个不同的数 */
int Number = 4; /* 有四个为 1,2,3,4, 的数 */
for (Hundred = 1; Hundred <= Number; Hundred ++)
{
for (TenDigits = 1; TenDigits <= Number; TenDigits ++)
{
for (Bit = 1; Bit <= Number; Bit ++)
{
if (Hundred != TenDigits && TenDigits != Bit && Hundred != Bit)
{
printf ("%d%d%d ", Hundred, TenDigits, Bit);
Sum ++;
}
}
}
printf ("\n");
}
printf ("%d\n", Sum);
return 0;
}
优化:
第一个 if 判断百位和十位是否相同,相同就跳出(不符合题意),第二个 if 判断百位和个位、个位和十位是否相同,相同就跳出(不符合题意),这么做的原因是可以减少循环次数,增加效率!!
#include <stdio.h>
int main(void)
{
int Hundred = 1; /* 百位变量 */
int TenDigits = 1; /* 十位变量 */
int Bit = 1; /* 个位 */
int Sum = 0; /* 一共有多少个不同的数 */
int Number = 4; /* 有四个为 1,2,3,4, 的数 */
for (Hundred = 1; Hundred <= Number; Hundred ++)
{
for (TenDigits = 1; TenDigits <= Number; TenDigits ++)
{
if (Hundred != TenDigits)
{
for (Bit = 1; Bit <= Number; Bit ++)
{
if (Hundred != Bit && Bit != TenDigits)
{
printf ("%d%d%d ", Hundred, TenDigits, Bit);
Sum ++;
}
}
}
else
{
continue;
}
}
printf ("\n");
}
printf ("%d\n", Sum);
return 0;
}
结果:
再次申明不是原创!!参考来源:【C语言】有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?_发量充足的小姚的博客-CSDN博客_有1,2,3,4个数字,能组成多少个互不相同
系统:win10
环境:Clion 2021
语言:C语言
日期:2022 / 6 / 9