HDU5373 整除11
来源:互联网 发布:ubuntu无法联网 编辑:程序博客网 时间:2024/06/03 20:36
HDU5373 The shortest problem
一个数能被11整除,那么它的奇数位和与偶数位和的差能整除11
比如:35816能整除11,(3+8+6)-(5+1)=11,11也能整除11
题意:给了一个数比如n,进行t次操作,每次把每一位求和,补在后面,形成一个新的数,经过t次操作得到的新数能否整除11。
比如n=123,t=3:
第1次:1+2+3=6,得到1236;
第2次:1+2+3+6=12,得到123612;
第3次:1+2+3+6+1+2=15,得到12361215;
看12361215能否整除11.。
分析:只要得到奇数和,偶数和就行了,很简单
#include<cstdio>#include<cmath>#include<algorithm>using namespace std;int main(){ int i,T,cas=1; char c; while(1){ int e_sum=0,o_sum=0;//记录偶数位奇数位数字的和 bool flag=0; for(i=1;(c=getchar())!=' ';i++){ if(c=='-')flag=1; if(i%2)o_sum+=c-'0'; else e_sum+=c-'0'; } scanf("%d",&T);getchar(); if(flag)return 0;//输入-1时结束 int sum=e_sum+o_sum; int temp_i=i-1;//原来的数有temp_i位数字 for(int t=1;t<=T;t++){ int temp_sum1=0,temp_sum2=0; for(i=1;sum>0;i++){//把sum每一位分解出来 int re=sum%10; if(i%2)temp_sum1+=re; else temp_sum2+=re; sum/=10; } i--;//sum有i个数 if(temp_i%2+i%2==1)swap(temp_sum1,temp_sum2);//根据奇偶关系推导出来这个 e_sum+=temp_sum1; o_sum+=temp_sum2; sum=e_sum+o_sum;//总和加起来下次 temp_i+=i;//合并之后的数有temp_i位数字 } int differ=abs(e_sum-o_sum);//当差为11的倍数的时候这个数就可以整除11 if(differ%11==0)printf("Case #%d: Yes\n",cas); else printf("Case #%d: No\n",cas); cas++; }}
如果觉得29行~31行难理解,那就看下面这个吧,我开始写的就是下面这个,后来觉得可以不用写这么长久就给缩短了一下
if(temp_i%2){ if(i%2){ e_sum+=temp_sum1; o_sum+=temp_sum2; } else{ e_sum+=temp_sum2; o_sum+=temp_sum1; }}else{ if(i%2){ e_sum+=temp_sum2; o_sum+=temp_sum1; } else{ e_sum+=temp_sum1; o_sum+=temp_sum2; }}
0 0
- hdu5373(整除11)
- HDU5373 整除11
- hdu5373
- hdu5373
- hdu5373
- The shortest problem(hdu5373+11的倍数)
- 整除11
- 1157: 整除11
- 整除
- 整除
- 整除
- 整除
- 整除
- 整除
- HDU5373(2015多校第7场1005)
- HDU5373 The shortest problem 数学水题
- hdu5373 The shortest problem(模拟,数学)
- HDU ACM 11 2099 整除的尾数
- 使用jdb和gdb同时调试java native code
- 简单工厂模式、工厂方法模式、抽象工厂模式
- Android内存泄露相关资料整理
- C++ Primer Plus(第6版) 第2章编程练习
- HDU5375 格雷码
- HDU5373 整除11
- uva 1627 Team them up! 二分图 + 连通分量 + 背包
- WinForm用户控件和自定义控件的异同;
- LoadRunner 获取时间的方法
- 【apache2.5】重启的注意事项
- Stein算法求最大公约数
- python的soap模块扩展
- 一些概念概念总结
- 黑马程序员---OC中类与对象 语法杂记