pascal问题猜数字(难) 5
味味最近在玩猜数字的游戏,现在她也希望你来玩一下这个游戏。猜数字游戏的规则是这样的,告诉你一个正整数n(2<=n<=11),然后味味心中会想一个n个数字组成的数字串(数字...
味味最近在玩猜数字的游戏,现在她也希望你来玩一下这个游戏。猜数字游戏的规则是这样的,告诉你一个正整数n(2<=n<=11),然后味味心中会想一个n个数字组成的数字串(数字串最前面若干位可能是0) 。味味会随意排列n位数上的数字,这样可能产生n!个n位数。(n!=1×2×3×4×5×……×n,n!念作“n阶乘”).
比如味味想了一个三位数abc,那么一共会产生六个三位数,分别为abc,acb,bac,bca,cab,cba
然后味味会把这n!个n位数求和得到S(若某数第一位开始有若干个0,则求和时这些0舍去。如有数“0123”,则求和时加到s中的值是123),她会告诉你总和S减去她心中想的那个数的值,请你猜出味味心中想的那个数。
输入
输入文件guess.in 共包含两行。第一行一个整数n(含义如前面所述),第二行一个正整数S,表示n!个数的总和减去味味心中那个数的值。
输出
输出文件change.out共一行一个数,表示味味心中想的那个n位数(测试数据保证存在唯一解)。如果该数第一位开始有若干个0,则输出时这些0也必须输出(详见样例3)
样例输入
【输入输出样例1】
3
1209
【输入输出样例2】
4
45440
【输入输出样例3】
2
90
样例输出
【输入输出样例1】
123
【输入输出样例1 解释】
如果味味心中想的是123,则S=123+132+213+231+312+321-123=1209 符合要求。
【输入输出样例2】
1222
【输入输出样例2 解释】
如果味味心中想的是1222,则
S=1222+1222+1222+1222+1222+1222+2122+2122+2122+2122+2122+2122+2212+2212+2212+2212+2212+2212++2221+2221+2221+2221+2221+2221-1222=45440 符合要求。
【输入输出样例3】
09
【输入输出样例3 解释】
如果味味心中想的是09,则S=09+90-09=9+90-9=90,符合要求。
我需要源代码或者能够实现的思路,悬赏你懂的 展开
比如味味想了一个三位数abc,那么一共会产生六个三位数,分别为abc,acb,bac,bca,cab,cba
然后味味会把这n!个n位数求和得到S(若某数第一位开始有若干个0,则求和时这些0舍去。如有数“0123”,则求和时加到s中的值是123),她会告诉你总和S减去她心中想的那个数的值,请你猜出味味心中想的那个数。
输入
输入文件guess.in 共包含两行。第一行一个整数n(含义如前面所述),第二行一个正整数S,表示n!个数的总和减去味味心中那个数的值。
输出
输出文件change.out共一行一个数,表示味味心中想的那个n位数(测试数据保证存在唯一解)。如果该数第一位开始有若干个0,则输出时这些0也必须输出(详见样例3)
样例输入
【输入输出样例1】
3
1209
【输入输出样例2】
4
45440
【输入输出样例3】
2
90
样例输出
【输入输出样例1】
123
【输入输出样例1 解释】
如果味味心中想的是123,则S=123+132+213+231+312+321-123=1209 符合要求。
【输入输出样例2】
1222
【输入输出样例2 解释】
如果味味心中想的是1222,则
S=1222+1222+1222+1222+1222+1222+2122+2122+2122+2122+2122+2122+2212+2212+2212+2212+2212+2212++2221+2221+2221+2221+2221+2221-1222=45440 符合要求。
【输入输出样例3】
09
【输入输出样例3 解释】
如果味味心中想的是09,则S=09+90-09=9+90-9=90,符合要求。
我需要源代码或者能够实现的思路,悬赏你懂的 展开
展开全部
这道题目方法是一定有的,但很遗憾,我只想到了最暴力的枚举
输入一个数,和那货心中的数的位数
把n位数每个都枚举一遍,求每个数的全排列,减去原来那个数,再和那个数进行对比
好像n超过4就会爆掉
输入一个数,和那货心中的数的位数
把n位数每个都枚举一遍,求每个数的全排列,减去原来那个数,再和那个数进行对比
好像n超过4就会爆掉
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#include<iostream>
using namespace std;
int main(){
int n,i,j,p;
long long m,k,t,s,temp;
cin>>n;
cin>>s;
t=1;k=1;
for (i=1;i<n;i++) t=t*i;
for (i=1;i<n;i++)
{
temp=1;
for (j=1;j<=i;j++) temp*=10;
k=k+temp;
}
k=k*t;
i=0;
do{
i++;
m=k*i-s;
p=0; j=0;
while (m>0){
j++;
p+=m%10;
m/=10;
}
}while (p!=i);
m=p*k-s;
if (j<n) {
for (i=1;i<=n-j;i++)
cout<<0;
}
cout<<m;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询