给定不超过6的整数A,考虑从A开始的连续四个数字,请输出所有由他们组成的无重复数字的三位数.输出要求如下.
首先需要输入一个变量a.我们需要做一个三位数 三位数的每一位都能是四个数字里面的任一个a,a+1,a+2,a+3,但不能重复.显然我们需要三重循环.每一轮的循环都能从a走到a+3.我们可以用while来做做看.我们不妨说现在我们有三个变量i,j,k.(为什么习惯用i作为循环变量呢,因为i是index的首字母.)我们先让i=a,循环条件为(i<=a+3),然后在这个循环里头,显然我们循环的每一轮都需要让i++,然后让j=a(每次重置j的值),第二层循环是j++,k=a,第三层则让k++,由于输出格式的要求,我们需要让三个数不相等才能打印出来,因此我们需要三个判断语句,判断三者是否相等(求所有三位数则去掉这三个判断语句).同时我们需要一个变量count来计算是否等于6,不等于6则用空格隔开,等于6则打印\n,可以用if else来实现.代码如下:
#include<stdio.h>
int main(){
int a;
scanf("%d",&a);
int i,j,k;
int cnt=0;
i=a;
while(i<=a+3)
{
j=a;
while(j<=a+3)
{
k=a;
while(k<=a+3){
if(i!=j&&j!=k&&i!=k){ //这里我懒得写三个判断条件了
printf("%d%d%d",i,j,k);
cnt ++;
if(cnt%6!=0){
printf(" ");
}
else
{
printf("\n");
}
}
k++;
}
j++;
}
i++;
}
}
三位数的值可以一个一个打印出来 也可以累加之后再打印 但前者较优 因为不用重复累加的步骤
这是我的代码,我用的是for循环.那时候可能是看题目的A,然后几乎所有变量都有大写了,真的无语.
我用的累加再输出,明显没有直接打印每个数好.
#include<stdio.h>
int main(){
int A;
scanf("%d",&A);//A<=6
int RE=A;
int count=0;
for(A=A;A<RE+4;A++)
{
for(int B=RE;B<RE+4;B++)
{
for(int C=RE;C<RE+4;C++){
int sum=A*100+B*10+C;
if(A!=B&&B!=C&&A!=C)
{
printf("%d",sum);
count ++;
if(count%6!=0){
printf(" ");
}
else
{
printf("\n");
}
}
}
}
}
}