第四周的工作室课题主要练习的还是算法这一块:
Description
100 可以表示为带分数的形式:100 = 3 + 69258 / 714。
还可以表示为:100 = 82 + 3546 / 197。
注意特征:带分数中,数字1~9分别出现且只出现一次(不包含0)。
类似这样的带分数,100 有 11 种表示法。
Input
从标准输入读入一个正整数N (N<1000*1000)
Output
程序输出该数字用数码1~9不重复不遗漏地组成带分数表示的全部种数。
例:输入100 输出11
代码展示:
#include<iostream>
#include<algorithm>
using namespace std;
int num=0;
int arr[10];
int sum1(int x , int y)
{
int sum=0;
for(int i = x ; i < y ; i++)
{
sum=sum*10+arr[i+1];
}
return sum;
}
int main()
{
int m;
cin >> m;
for(int i = 1 ; i < 10 ; i++)
{
arr[i] = i;
}
do{
for(int i=1 ; i <= 9 ; i++)
{
int n1 = sum1(0 , i);
if(n1 > m) break;
for(int j = i+(10-i)/2 ; j < 9 ; j++)
{
int n2 = sum1(i , j);
int n3 = sum1(j , 9);
if(n2%n3==0&&n2>=n3&&m==n1+n2/n3)
num++;
}
}
}while(next_permutation(arr+1,arr+10));
cout << num << endl;
return 0;
}