C语言-将1到9这九个数字分成三个3位数,要求第一个3位数,正好是第二个3位数的1/2,是第三个3位数的1/3。问应当怎样分,编写程序实现。

思路:

首先分析题目,设第一个数为m,则第二个数为2m,第三个数为3m;

定义一个大小为9的int型全局数组,将各个数的各位依次输入数组,每次进入一个元素,就与前面的数组元素进行比对,若相同,则说明此时的m不满足条件。下界为123,上界为333,循环寻找。


#include<stdio.h>

int array[9];       //存储三个三位数各个位的全局数组
int OK(int m,int *array);
int main()
{
    int m;
    int count=1;
    for(m=123;m<333;m++)
    {
        if(OK(m,array)&&OK(2*m,array+3)&&OK(3*m,array+6))   //第二个数从array[3]开始存,第三个数从array[6]开始存。
         {
             printf("#%d:%d %d %d\n",count,m,2*m,3*m);
             count++;
         }
    }
    return 0;
}

int OK(int number,int *curPtr)      // 判断number这个数中各个位上的数字在之前是否出现过,curPtr是指向该数字开始存储的位置
{
    int *i,*j;
    for(i=curPtr;i<curPtr+3;i++)
    {
        *i=number%10;    
        number/=10;
        if((*i)==0)return 0;     //判断输入的数字是否为0,为0则必不满足,返回0
        for(j=array;j<i;j++)
        {
            if((*i)==(*j))return 0;  //只要输入的数字和前面某一个数字相同,则不满足
        }
    }
    return 1;
}


评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值