今天又是在排列数值的道路上前行。
在这个题中要求穷举所有数值排列可能,这时明显是要用循环语句,但是此题对数值的筛选要求不利于使用单个循环,所以需要多重循环结构:
int main()
{
int i,j,k;
printf("\n");
for(i=1;i<5;i++)
{
for(j=1;j<5;j++)
{
for (k=1;k<5;k++)
{
if (i!=k&&i!=j&&j!=k)
{
printf("%d,%d,%d\n",i,j,k);
}
}
}
}
}
多重循环在没有限制的情况下(即没有一个提前结束,且互不影响),每个for所关联的循环同时进行,且最终输出时用if限制了输出的数不为重复数字,同时将多余数不做输出处理(if句未接else,在最接近printf的}后),直接舍去。
此时我突然想到,如果题目改为三位数中重复的数最多只能有两位,代码的编写又要不同,主要在于if句的变化
即可达成目的,
不过原题中if (i!=k&&i!=j&&j!=k)不可改为if(i=j=k)因为此时仅为i,k,j三数都相等的情况,没有两数相等的情况,不同的表述可以造成不同的筛选效果。要注意。