baby00qi 2016-03-13 16:06 采纳率: 50%
浏览 2756

C语言 带分数问题 求大神帮忙看看

 /*------------------------------------------------------------------------------------------------------------------
标题:带分数
100 可以表示为带分数的形式:100 = 3 + 69258 / 714
还可以表示为:100 = 82 + 3546 / 197
注意特征:带分数中,数字1~9分别出现且只出现一次(不包含0)。
题目要求:
从标准输入读入一个正整数N (N<1000*1000)
程序输出该数字用数码1~9不重复不遗漏地组成带分数表示的全部种数。

例如:
用户输入:
100
程序输出:
11
再例如:
用户输入:
105
程序输出:
6

left=1时,down每调试到一定的数值后就返回了,不知道为什么,求大神帮忙看看
---------------------------------------------------------------------------------------------------------------------------*/
#include<stdio.h>
#include<math.h>

int check(int n);
int check_allHave();
int qiu_wei_shu(int n);

int flag[10]={0};

int main()
{
    int N=0; // N=left+up/down
    int left=0;
    int up=0;
    int down=0;
    int count=0;  //计数 
    int wei_shu_left=0;
    int temp[10]={0};
    scanf("%d",&N);

    for(left = 1;left < N;left++){
        if(check(left))  continue; //不合理
        wei_shu_left = qiu_wei_shu(left);
        for(int i = 0;i < 10;i++)
            temp[i] = flag[i];
        for(down = 1;down < pow(10,9-wei_shu_left-1);down++){ //down最多 9-wei_shu_left-1 位数
            up = (N - left) * down;
            for(int i = 0;i < 10;i++) //重置为left循环时的flag,为新一轮down做准备 
                flag[i] = temp[i];
            if(check(down) || check(up))
                continue;  //不合理
            else if(check_allHave() == 0)
                count++;
        } 
    }

    printf("%d\n",count);
    return 0; 
 } 

int check(int n)
{
    while(n){
        flag[n%10]++;
        n/=10;
    }
    if(flag[0])  return 1; //判断是否有0 
    for(int i = 1;i <= 9;i++){  //判断1~9是否重复 
        if(flag[i] > 1) return 1;
    }
    return 0;
}

int check_allHave()  //最后判断1~9是否都包含了
{

    for(int i = 1;i <= 9;i++){
        if(flag[i] != 1)    
            return 1;
    }
    return 0;
 } 

int qiu_wei_shu(int n)
{
    int wei_shu=0;
    while(n){
        n%10;
        n/=10;
        wei_shu++;
    }
    return wei_shu;
}
  • 写回答

4条回答 默认 最新

  • renlong0829 2016-03-13 16:47
    关注

    带分数的概念不是这样的吧,分数部分必须是分子小于分母才对

    评论

报告相同问题?

悬赏问题

  • ¥15 Qt下使用tcp获取数据的详细操作
  • ¥15 idea右下角设置编码是灰色的
  • ¥15 全志H618ROM新增分区
  • ¥15 在grasshopper里DrawViewportWires更改预览后,禁用电池仍然显示
  • ¥15 NAO机器人的录音程序保存问题
  • ¥15 C#读写EXCEL文件,不同编译
  • ¥15 MapReduce结果输出到HBase,一直连接不上MySQL
  • ¥15 扩散模型sd.webui使用时报错“Nonetype”
  • ¥15 stm32流水灯+呼吸灯+外部中断按键
  • ¥15 将二维数组,按照假设的规定,如0/1/0 == "4",把对应列位置写成一个字符并打印输出该字符