7-16 求符合给定条件的整数集 (15分)

给定不超过6的正整数A,考虑从A开始的连续4个数字。请输出所有由它们组成的无重复数字的3位数。
输入格式:
输入在一行中给出A。
输出格式:
输出满足条件的的3位数,要求从小到大,每行6个整数。整数间以空格分隔,但行末不能有多余空格。
输入样例:
2

输出样例:
234 235 243 245 253 254
324 325 342 345 352 354
423 425 432 435 452 453
523 524 532 534 542 543

以题中输入2为例,则是将2,3,4,5 这4个数组合。我们可以先把所有的组合数求得,然后将得到的这24个数按由小到大的顺序排列,再按题需格式输出。
要得到这24个三位数,可以假想先把2放在百位,通过2* 100即可实现。十位我们可以用其他3个不同于百位的数,假如是3,通过3* 10即可把 3 放在十位上。最后个位上我们放上不同于百位和十位的数即可。通过这种方法即可得到所需的24个三位数。可以将这些数保存到一个数组中,再用冒泡排序,最后输出即可。

#include<stdio.h>
int main()
{
 int a,i,j,t,w,sum;
 int num[4];//保存4个用来组合的数字 
 int data[24];//组合可得24个数,用data保存这些数 
 scanf("%d",&a);
 for(i=0;i<4;i++)
 {
  num[i]=a;
  a++;
 }
 i=0;//用i来表示data[]下标 
 for(j=0;j<4;j++)
 {
  for(t=0;t<4;t++)
  {
   sum=num[j]*100; 
   if(t!=j)//不可将此条件放入循环中判定,要出错。 
   {
    sum=sum+num[t]*10;
     for(w=0;w<4;w++)
     {
      if(w!=t&&w!=j)
      {
       sum=sum+num[w];
       data[i]=sum;
       i++;
       sum=sum-num[w];//退出循环时要把个位的数减掉。 
      }
     }
   } 
  }
 }
 for(i=23;i>=0;i--)//用冒泡将所得数据按从小到大排列。 
 {
  for(j=0;j<i;j++)
   if(data[j]>data[j+1])
   {
    t=data[j];
    data[j]=data[j+1];
    data[j+1]=t;
   } 
 }
 for(i=0;i<24;i++) 
 {
  if((i+1)%6==0)//按照题中要求格式输出 
   printf("%d\n",data[i]);
     else  printf("%d ",data[i]);
 }
} 
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

超好的小白

没体验过打赏,能让我体验一次吗

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值