zoukankan      html  css  js  c++  java
  • 蓝桥杯历届试题 带分数 全排列

      历届试题 带分数  

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

          

    问题描述

    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

    题解:通过全排列将九个数字的各种情况都排出来,然后切割为a,b,c三个数字,筛选b整除c并且小于1000000的结果,记录出现次数

    全排列

     #include<iostream>
     #include<algorithm>
     using namespace std;
     int main()
     {
            int ans[3]={2,1,3};
            do /*注意这步,如果是while循环,则不会输出2 1 3*/
            {
            for(int i=0;i<3;++i)
                 cout<<ans[i]<<" ";
             cout<<endl;
            }while(next_permutation(ans,ans+3));
            //结果:2 1 3    2 3 1    3 1 2    3 2 1
         return 0;
    }
    
    #include<iostream>
    #include<algorithm>
    using namespace std;
    int num[1000011],q[11];
    int main()
    {
            int n;
            scanf("%d",&n);
            for(int i=0;i<9;i++)
                    q[i]=i+1;
            do{
                    for(int i=0;i<7;i++)
                            for(int j=i+1;j<8;j++){
                                    int a,b,c;
                                    a=b=c=0;
                                    for(int k=0;k<=i;k++)
                                            a=a*10+q[k];//前i位组成的数
                                    for(int k=i+1;k<=j;k++)
                                            b=b*10+q[k];//i+1~j位组成的数
                                    for(int k=j+1;k<9;k++)
                                            c=c*10+q[k];//j+1到末尾组成的数
                                    if(b%c==0){
                                            int cnt=a+b/c;
                                            if(cnt<1000000)
                                                    num[cnt]++;
                                    }
                            }
            }while(next_permutation(q,q+9));
            printf("%d
    ", num[n]);
            return 0;
    }
    
  • 相关阅读:
    计蒜客
    CodeForces -1216B.Shooting
    关于gets读入因为缓冲区出现的问题
    CodeForces
    Codeforces Round #603 (Div. 2) C.Everyone is A Winner!
    Codeforces Round #603 (Div. 2) A.Sweet Problem
    Codeforces Round #603 (Div. 2)B. PIN Codes
    Codeforces 524C.The Art of Dealing with ATM(暴力)
    Codeforces Round #600 (Div. 2) C. Sweets Eating
    数组的定义和初始化
  • 原文地址:https://www.cnblogs.com/aeipyuan/p/10459912.html
Copyright © 2011-2022 走看看