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

来源:互联网 发布:淘宝钻展怎么弄啊 编辑:程序博客网 时间:2024/06/06 16:51

思路:

首先分析题目,设第一个数为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;}


阅读全文
0 0