zoukankan      html  css  js  c++  java
  • 带分数(全排列+判断条件)


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

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

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

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

    题目要求:
    从标准输入读入一个正整数N (N<1000*1000)
    程序输出该数字用数码1~9不重复不遗漏地组成带分数表示的全部种数。
    注意:不要求输出每个表示,只统计有多少表示法!


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

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


    资源约定:
    峰值内存消耗 < 64M
    CPU消耗  < 3000ms
    思路:全排列判断加号和除号位置(之前做法超时)

    代码:

    #include<iostream>
    #include<algorithm>
    #include<cstring>
    #include<cstdio>
    using namespace std;
    int a[9]={1,2,3,4,5,6,7,8,9},sum=0;
    int d(int n){
    	int n1=0;
    	for(int i=0;i<=6;i++){
    		n1=n1*10+a[i];
    		if(n1>n)break;
    		int n2=0;
    		for(int j=i+1;j<=7;j++){
    			n2=n2*10+a[j];
    			int n3=0;
    			for(int k=j+1;k<=8;k++){
    					n3=n3*10+a[k];
    					if(n3>n2)break;
    					
    					
    			}
    			if(n==(n1+n2/n3)&&n2%n3==0) sum++;
    		}
    		
    	}
    	
    }
    int main() {
    	int n;
    	cin>>n;
    	do{
    		d(n);
    	}while(next_permutation(a,a+9));
    	cout<<sum;
    	return 0;
    }
    
  • 相关阅读:
    LeetCode——打家劫舍问题
    LeetCode——无重叠区间
    LeetCode——岛屿数量
    LeetCode——石子游戏
    LeetCode——最长回文子序列
    LeetCode——高层扔鸡蛋*
    LeetCode——零钱兑换
    LeetCode刷题之BFS和DFS
    没有学历,四步加入谷歌
    坚持编程
  • 原文地址:https://www.cnblogs.com/Staceyacm/p/10781835.html
Copyright © 2011-2022 走看看