数字(number)
题目可在下载频道下载:戳我
题目:
Task 2. 数字(number) 空间限制:256MB 时间限制:1s
Description
给你n个0~9的数字,请你把它们排成一个不含前导0的n位数,满足这个数是233的倍数。求有多少种可行的方案。
(我们把n个数字从1~n标号,两个方案不同当且仅当标号序列不同)
Input
第一行一个数n。
第二行n个空格隔开的数,为给你的数。保证至少有一个不为0。
Output
一行一个数,表示方案数。
Range
1≤n≤10
Sample
number.in
4
2 3 3 0
number.out
2
两种方案分别是:2330和2330。(注意两个3是视作不同的)
坑点:
1、计数器要开到long long
代码:
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<algorithm>
int num[100],f[100],n;
int judge(long long x)
{
if(x%233!=0)return 0;
int count = 0;
while(x!=0)
{
count++;
x/=10;
}
if(count<n)return 0;
return 1;
}
int get_ans(int deep,long long number)
{
if(deep==n)return judge(number);
int ans = 0;
for(int i = 0;i<n;i++)
{
if(f[i]==1)continue;
f[i] = 1;
ans += get_ans(deep+1,number*10+num[i]);
f[i] = 0;
}
return ans;
}
int main()
{
freopen("number.in","r",stdin);
freopen("number.out","w",stdout);
std::cin>>n;
for(int i = 0;i<n;i++)std::cin>>num[i];
std::cout<<get_ans(0,0);
fclose(stdin);
fclose(stdout);
return 0;
}
随时随刻,当你想要颓废的时候,想想之前为何而来,当你想要放弃的时候,想想之前你为何坐在这里