HDU 1271
来源:互联网 发布:网络段子精选哲理 编辑:程序博客网 时间:2024/05/16 17:59
题意:一个数A去掉一位后变成B,给出A+B的和N,求所有可能的A
分析:设丢失的是第k位,第k位上的数字数b,前面的数是c,后面的数是a,即A=c^(k+1)+b^k+a;
那么N=c^(k+1)+b^k+a+c^k+a=11*c^k+b^k+2*a;
枚举k,求c,b,a,判断是否符合,2*a可能产生进位,所以b可能等于b-1
#include <iostream>#include<algorithm>#include<cstring>#include<string>#include<cstdio>#define N 20#include<cmath>using namespace std;int l,cnt,num[N],num2[N],ans[N];string str;int tmp;int main(){ int a,b,c,i,j,x,t,k; while(cin>>str){ cnt=0; memset(num,0,sizeof(num)); if(str[0]=='0') break; l=str.size(); int x=0; for(i=0;i<l;i++) x=x*10+str[i]-'0'; for(i=0;i<l;i++){//第i位丢失 t=pow((int)10,(int)i); tmp=x; c=tmp/t/11; b=tmp/t%11; if((b+c)!=0&&b<10){ a=(tmp-11*t*c-t*b)/2; if(11*t*c+t*b+2*a==x){ ans[cnt++]=a+b*t+c*t*10; } } b--; if((b+c)!=0&&b>=0){ a=(tmp-11*t*c-t*b)/2; if(11*t*c+t*b+a*2==x){ ans[cnt++]=a+b*t+c*t*10; } } } if(!cnt) printf("No solution.\n"); else { sort(ans,ans+cnt); for(i=0;i<cnt-1;i++) if(ans[i]!=ans[i+1]) printf("%d ",ans[i]); printf("%d\n",ans[cnt-1]); } } return 0;}
0 0
- HDU 1271
- hdu 1271 整数对
- HDU-1271 整数对
- HDU 1271 整数对
- hdu 1271 整数对
- HDU 1271 Arbitrage
- HDU 1271 整数对
- 整数对 hdu-1271
- HDU 1271 整数对
- HDU-1271 整数对
- hdu-1271 整数对
- HDU 1271整数对
- HDU-1271-整数对
- HDU 1271 整数对
- HDU 1271 整数对
- hdu
- hdu
- HDU
- 执行计划中各个字段的含义描述及获取方法
- 线程同步
- Mysql 多个子查询 多个LEFT JOIN 视图创建
- 数据结构 -- 二叉树中序遍历
- tomcat加载web.xml
- HDU 1271
- 创业型团队需要的云计算
- 有趣的linux命令
- POJ - Fibonacci 【快速幂 + 矩阵】
- OC之内存管理
- 18 MySQL加锁处理分析
- Marvell 2014美满电子校园招聘全面启动!
- Nyoj-172 小珂的图表
- 一些网站