codeFores375A
来源:互联网 发布:ubuntu install pip 编辑:程序博客网 时间:2024/06/17 06:51
思路:构造法
将1、6、8、9取出来,因为1689的排列所有除7的余数都能得到,所以可以将其他的数放在最前面,然后后面的缺几就用1689的排列去补充就够了。举例:P为1689的排列,xxxP%7=((xxx0000%7)+(P%7))%7,求出xxx0000%7的余数为5的话,那么构造一个P使得(P%7)余2就能够使这个数被7整除了。
#include<iostream>#include<cstdio>#include<cstring>using namespace std;string f[7]={ "1869","1968","1689", "6198","8691","8916","1896"};int vis[10];int main(){string ch,st="";int i,j;cin>>ch;memset(vis,0,sizeof(vis));for(i=0;i<ch.size();i++){if(ch[i]=='1'){if(!vis[1]) vis[1]=1;else st+=ch[i];}else if(ch[i]=='6'){if(!vis[6]) vis[6]=1;else st+=ch[i];} else if(ch[i]=='8'){if(!vis[8]) vis[8]=1;else st+=ch[i];}else if(ch[i]=='9'){if(!vis[9]) vis[9]=1;else st+=ch[i]; }else st+=ch[i];}int flag=0;for(i=0;i<st.size();i++) if(st[i]!='0'){flag=1;char g=st[i];st[i]=st[0];st[0]=g;}//解决前导是0的问题,如果不写会出错if(!flag){cout<<f[0]<<st<<endl;}else{int t=0; for(i=0;i<st.size();i++){t=(t*10+st[i]-'0')%7;} for(i=0;i<4;i++){t=(t*10+'0'-'0')%7;}if(t) t=7-t;cout<<st<<f[t]<<endl;}}
0 0
- codeFores375A
- JPUSH andoid推送开发
- SqlHelper.cs的经典代码
- 本博客说明
- 并查集路径压缩
- Java 使用方法重载实现给函数设定默认值
- codeFores375A
- C代码的coredump
- iOS 中UI部分一些类的继承关系
- Chapter 3 | Stacks and Queues--实现数据结构模拟一个栈由几个子栈组成,并可以在指定子栈上进行出栈操作
- adaboost算法分类器的训练
- 在Ubuntu上为Android系统编写Linux内核驱动程序--实践中碰到的问题
- linux下使用axel下载百度网盘的资源
- codeforces 374A
- rational rose的下载和安装教程