巧妙填数

9 巧妙填数

   1

   9

  2

   3

   8

  4

   5

   7

  6

    19这九个数字填入九个空格中。每一横行的三个数字组成一个三位数。如果要使第二行的三位数是第一行的两倍, 第三行的三位数是第一行的三倍, 应怎样填数。   

 

 

分析:本题目有9个格子,要求填数,如果不考虑问题给出的条件,共有9=362880种方案,在这些方案中符合问题条件的即为解。因此可以采用枚举法

 

#include<string.h>
#include<stdio.h>

 

#define PRODUCT 1*2*3*4*5*6*7*8*9
#define SUM 1+2+3+4+5+6+7+8+9
bool check_same(int num)
{
 int bai = num / 100;
 int shi = ( num / 10) % 10;
 int ge = ( num % 100) % 10;
 if(bai == shi || bai == ge || shi == ge || shi == 0 || ge == 0)
  return true;
 else return false;
}
int product_num(int num)
{
 int bai = num / 100;
 int shi = ( num / 10) % 10;
 int ge = ( num % 100) % 10;

 return bai * shi * ge;
}
int sum_num(int num)
{
 int bai = num / 100;
 int shi = ( num / 10) % 10;
 int ge = ( num % 100) % 10;

 return bai + shi + ge;

}
bool check_size(int num)
{
 int sum = sum_num(num) + sum_num(num*2) + sum_num(num*3);
 int product = product_num(num) * product_num(num*2) * product_num(num*3);
 
 if(sum == SUM && product == PRODUCT)
  return true;
 else return false;
}
void main()
{
 for(int i = 123;i <= 398;i++)
 {
  if(check_same(i))
  {
   continue;
  }else if(check_size(i))
  {
   printf("%d/t%d/t%d/n",i,i*2,i*3);
  }
 }

}

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值