当前位置 :
用123...9这九个数字组成三个三位数,使第二个数是第一个数的两倍,第三个是第一个数的3倍,用C++怎样实现
更新时间: 2025-08-29 07:25:16
1人问答
问题描述:

用123...9这九个数字组成三个三位数,使第二个数是第一个数的两倍,第三个是第一个数的3倍,用C++怎样实现

侯崇升回答:
  做出来了,不过我是用C写的,你应该可以改成C++的吧,主要还是思路,讲解一下我的思路吧:   如果用排列组合的话,工作量肯定很大,我们可以反过来想,假设有第一个数,那么我们可以求出第二个数和第三个数,然后计算这三个数中所有位上的数字的个数,统计下,看是否从1-9都使用了一遍,如果是,那么这三个数就是要求的,否则接着找.   第一个数怎么就有了呢,很简单,既然是三位数,我们从100开始循环就行了,直到999;不过仔细想想,其实不用循环到999,因为到333的时候,第三个数刚好是999,334的时候第三个数就不是三位数了.因此第一个数从100循环到333就可以了.   #include <stdio.h>   #include <math.h>   #include <stdlib.h>   int main()   {   int i, j, k, flag;   int num1, num2, num3, n1, n2, n3;//分别表示第一个数、第二个数和第三个数   int s[12]; //记录数字的个数   //只需要循环333次就够了,接着往下循环的话,第三个数就超过1000了   for(i=100; i<=333; i++)   {   //将数组a的值全部置为0   for(j=0; j<10; j++)   {   s[j] = 0;   }   flag = 1;   n1 = num1 = i;   n2 = num2 = i*2;   n3 = num3 = i*3;   //一下三个while循环是统计各个位上数字的个数   while(num1)   {   k = num1%10;   s[k]++;   num1 /= 10;   }   while(num2)   {   k = num2%10;   s[k]++;   num2 /= 10;   }   while(num3)   {   k = num3%10;   s[k]++;   num3 /= 10;   }   //判断1-9的使用情况,如果一个数使用多次或一次也没使用,表示不符合要求   for(j=1; j<10; j++)   {   if(s[j]>=2 || s[j]==0)   {   flag = 0;   break;   }   }   if(flag == 1)   {   printf("%-5d%-5d%-dn", n1, n2, n3);   }   }   return 0;   }
最新更新
热门其它
保卡通(baokatong.com)汇总了汉语字典,新华字典,成语字典,组词,词语,在线查字典,中文字典,英汉字典,在线字典,康熙字典等等,是学生查询学习资料的好帮手,是老师教学的好助手。
声明:本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
Copyright©2009-2021 保卡通 baokatong.com 版权所有