针对多个数字组合求解时,可以选择使用最基础的循环求解,锻炼巩固基础能力。
有关多重循环:
针对多次,多数问题起到很好的作用。
例:
奖券数目
有些人很迷信数字,比如带“4”的数字,认为和“死”谐音,就觉得不吉利。
虽然这些说法纯属无稽之谈,但有时还要迎合大众的需求。某抽奖活动的奖券号码是5位数(10000-99999),要求其中不要出现带“4”的号码,主办单位请你计算一下,如果任何两张奖券不重号,最多可发出奖券多少张。
请提交该数字(一个整数),不要写任何多余的内容或说明性文字。
#include <stdio.h>
#include<math.h>
int main()
{
int a, b, c, d, e;
int sum = 0;
for (a = 1; a <= 9; a++)
{
for (b = 0; b <= 9; b++)
{
for (c = 0; c <= 9; c++)
{
for (d = 0; d <= 9; d++)
{
for (e = 0; e <= 9; e++)
{
if (a == 4 || b == 4 || c == 4 || d == 4 || e == 4)
{
continue;
}
sum++;
}
}
}
}
}
printf("%d", sum);
return 0;
}
这个问题中的数字可以重复,所以仅在最后一次循环将条件给出即可。
另一道为:
问题描述:
观察下面的加法算式:
祥 瑞 生 辉
+ 三 羊 献 瑞
-------------------
三 羊 生 瑞 气
其中,相同的汉字代表相同的数字,不同的汉字代表不同的数字。
请你填写“三羊献瑞”所代表的4位数字(答案唯一),不要填写任何多余内容。
#include <stdio.h>
#include<math.h>
int main()
{
int a, b, c, d, e, f, g, h;
for (a = 1; a <= 9; a++)
{
for (b = 0; b <= 9; b++)
{
if (b == a)
{
continue;
}
for (c = 0; c <= 9; c++)
{
if (c == a || c == b)
{
continue;
}
for (d = 0; d <= 9; d++)
{
if (d == c || d == b || d == a)
{
continue;
}
for (e = 1; e <= 9; e++)
{
if(e==a||e==b||e==c||e==d)
{
continue;
}
for (f = 0; f <= 9; f++)
{
if (f == a || f == b || f == c || f == d || f == e)
{
continue;
}
for (g = 0; g <= 9; g++)
{
if(g==a||g==b||g==c||g==d||g==e||g==f)
{
continue;
}
for (h = 0; h <= 9; h++)
{
if (h == a || h == b || h == c || h == d || h == e || h == f || h == g)
{
continue;
}
else
{
if (a * 1000 + b * 100 + c * 10 + d + e * 1000 + f * 100 + g * 10 + b == e * 10000 + f * 1000 + c * 100 + b * 10 + h)
{
printf("%d%d%d%d", e, f, g, b);
}
}
}
}
}
}
}
}
}
}
return 0;
}
这道题中各个数字不可以重复,选择在每一道循环中加入约束条件,循序渐进。
循环真不错。