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,符合要求。
我需要源代码或者能够实现的思路,悬赏你懂的
展开
 我来答
武风002
2015-01-01 · TA获得超过858个赞
知道小有建树答主
回答量:1016
采纳率:100%
帮助的人:312万
展开全部
这道题目方法是一定有的,但很遗憾,我只想到了最暴力的枚举

输入一个数,和那货心中的数的位数
把n位数每个都枚举一遍,求每个数的全排列,减去原来那个数,再和那个数进行对比
好像n超过4就会爆掉
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
涅槃挽歌墓
2018-08-07
知道答主
回答量:19
采纳率:0%
帮助的人:1.9万
展开全部
#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;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式