zoukankan      html  css  js  c++  java
  • 带分数

    带分数

    数字1~9分别出现且只出现一次这类题目:把9个数分成题目要求的几份即可。再通过sprintf把每个部分拼接起来,成为s字符串。最后判断字符串即可。提示:长度为9,排序后是“123456789”。如果枚举超时可以考虑再多写一个函数,舍去有0的情况、有重复数字的情况。

    参考博客:https://blog.csdn.net/karry_zzj/article/details/69656441

    例题如下:

     

      蓝桥杯历届试题 带分数  

     

    时间限制:1.0s   内存限制:256.0MB

     

    锦囊1
    枚举或搜索。

     

    问题描述

    100 可以表示为带分数的形式:100 = 3 + 69258 / 714。

    还可以表示为:100 = 82 + 3546 / 197。

    注意特征:带分数中,数字1~9分别出现且只出现一次(不包含0)。

    类似这样的带分数,100 有 11 种表示法。

    输入格式

    从标准输入读入一个正整数N (N<1000*1000)

    输出格式

    程序输出该数字用数码1~9不重复不遗漏地组成带分数表示的全部种数。

    注意:不要求输出每个表示,只统计有多少表示法!

    样例输入1
    100
    样例输出1
    11
    样例输入2
    105
    样例输出2
    6
     
     
     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 
     4 int a,b,c,n,flag[10],f[10];
     5 char s[10];
     6 
     7 int che(int n)
     8 {
     9     do
    10     {
    11         flag[n%10]++;
    12     }
    13     while(n/=10);
    14     if(flag[0]!=0)
    15         return 0;
    16     for(int i=1; i<=9; i++)
    17     {
    18         if(flag[i]>1)
    19             return 0;
    20     }
    21     return 1;
    22 }
    23 int che1()
    24 {
    25     sprintf(s,"%d%d%d",a,b,c);
    26     if(strlen(s)!=9)
    27         return 0;
    28     sort(s,s+9);
    29     int t=1;
    30     for(int i=0; i<9; i++)
    31     {
    32         if(s[i]!=t+'0')
    33         {
    34             return 0;
    35         }
    36         t++;
    37     }
    38     return 1;
    39 }
    40 int main()
    41 {
    42 
    43     scanf("%d",&n);
    44     int ans=0;
    45     for(a=1; a<n; a++)
    46     {
    47         memset(flag,0,sizeof flag);
    48         if(!che(a))
    49             continue;
    50         for(int i=0; i<=9; i++)
    51         {
    52             f[i] = flag[i];//记录这时的flag,已将a中的每个数记录好
    53         }
    54         for(c=1; c<10000; c++)
    55         {
    56             for(int i=0; i<=9; i++)
    57             {
    58                 flag[i]=f[i];//清除到之前记录时的flag
    59             }
    60             b=(n-a)*c;
    61             if(!che(b) || !che(c))
    62                 continue;
    63             if(che1())
    64             {
    65                 ans++;
    66             }
    67         }
    68 
    69     }
    70     printf("%d
    ",ans);
    71     return 0;
    72 }
  • 相关阅读:
    Winform开发框架之终极应用 伍华聪 博客园
    DZ外部调用登陆
    利用服务定时执行
    winForm写cookie经过
    正则第一天
    NHibernate
    Databases supported by NHibernate
    定时执行
    NHibernate视频教程
    bernate异常及处理方法
  • 原文地址:https://www.cnblogs.com/weixq351/p/9588991.html
Copyright © 2011-2022 走看看