2 baby00qi baby00qi 于 2016.03.14 00:06 提问

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
renlong0829   2016.03.14 00:47

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

baby00qi
baby00qi 不过题目中没有这项规定
2 年多之前 回复
renlong0829
renlong0829   2016.03.14 17:27

100真能分解成11组?我怎么只能得到4组?
105只有5组……

renlong0829
renlong0829 回复baby00qi: 你有这11组的分解值吗,我看看
2 年多之前 回复
baby00qi
baby00qi 是的,就是11组
2 年多之前 回复
renlong0829
renlong0829   2016.03.14 18:44

N = a+b/c

N = 100, a = 3, b = 69258, c= 714
>> N = 100, a = 81, b = 5643, c= 297
>> N = 100, a = 81, b = 7524, c= 396
>> N = 100, a = 82, b = 3546, c= 197

>> N =    105, a =     72, b =   6534, c=   198
>> N =    105, a =     87, b =   3456, c=   192
>> N =    105, a =     87, b =   9612, c=   534
>> N =    105, a =     92, b =   5681, c=   437
>> N =    105, a =     92, b =   6734, c=   518
renlong0829
renlong0829   2016.03.14 22:13
 N =    100, a =      3, b =  69258, c=   714
 N =    100, a =     81, b =   5643, c=   297
 N =    100, a =     81, b =   7524, c=   396
 N =    100, a =     82, b =   3546, c=   197
 N =    100, a =     91, b =   5742, c=   638
 N =    100, a =     91, b =   5823, c=   647
 N =    100, a =     91, b =   7524, c=   836
 N =    100, a =     94, b =   1578, c=   263
 N =    100, a =     96, b =   1428, c=   357
 N =    100, a =     96, b =   1752, c=   438
 N =    100, a =     96, b =   2148, c=   537

 N =    105, a =     72, b =   6534, c=   198
 N =    105, a =     87, b =   3456, c=   192
 N =    105, a =     87, b =   9612, c=   534
 N =    105, a =     92, b =   5681, c=   437
 N =    105, a =     92, b =   6734, c=   518
 N =    105, a =     98, b =   3647, c=   521
renlong0829
renlong0829 回复baby00qi: 说来听听
2 年多之前 回复
baby00qi
baby00qi 我已经知道我的代码哪里错了o( ̄▽ ̄)d
2 年多之前 回复
baby00qi
baby00qi 对呀,应该就是这些
2 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
一个简单游戏的程序
简单游戏的程序代码,大神们帮忙看看。简单游戏的程序代码,大神们帮忙看看。简单游戏的程序代码,大神们帮忙看看。简单游戏的程序代码,大神们帮忙看看。简单游戏的程序代码,大神们帮忙看看。
掌百模拟的雏形
无,不能登录了。求大神改改。我发了一个帖子。大家都帮忙看看
蓝桥杯:带分数(全排列)
蓝桥杯:带分数(全排列)。本文分析了蓝桥杯带分数求解方法中的暴力枚举法和全排列法,并对其进行了详细的分析。
ELM——HOG
代码有问题 出现内存访问错误 求大神帮忙修改
新浪漫步者6.1
感觉很不好的一个软件 求更好的 有没有大神帮忙!
fifo to uart
VHDL 带fifo的uart 源代码,求大神帮忙修改。
ssm例子一直报错userDao无法注入
哪个大神帮忙看看,谢谢啦
求大神们帮忙看看错误在哪
use warnings;use strict;open(INFILE, &quot;/Users/lizeshuo/Desktop/test2.txt&quot;) ||   die &quot;Cannot open the newfile: $!\n&quot;;open(OUTFILE, &quot;&amp;gt;test3.txt&quot;) ||   die &quot;Cannot open the newfile: $!\n&quot;;my @a;while (...
理解C语言——从小菜到大神的晋级之路(1)——引言:C语言的前世今生
C语言是现在应用最为广泛的编程语言之一,也是现在依然流行的编程语言中历史最悠久的一种之一。在目前业界广泛使用的编程语言中,许多 种语言是以C为基础发展而来。在多类大学的工程类专业尤其是信息类专业的教学计划中,C语言也是极为重要的基础课之一。 而对于一名以编译型语言为主要开发工具的程序员来说,熟练掌握C语言的用法和理论也可以对其他编程语言获得更深的理解。因此,在这一系列教程中我们希望可以深入理解C语
带分数 100 可以表示为带分数的形式:100 = 3 + 69258 / 714
package org.bluebridge.topics; /* * 带分数 100 可以表示为带分数的形式:100 = 3 + 69258 / 714 还可以表示为:100 = 82 + 3546 / 197 注意特征:带分数中,数字1~9分别出现且只出现一次(不包含0)。 类似这样的带分数,100 有 11 种表示法。 题目要求:从标准输入读入一个正整数N (N<1000*10