一年的省赛题目。

先容我骂一下,这题目有病吧,我调试了一个下午+晚上,好不容易才顺利A了,真是坑。

比赛中能做出来的那绝对是厉害啊!!。

我的思路,方法可能有笨:

1.首先判断下有几个0,有一个0的话,

一  。判断0后面有没有比9小的数,有的话那个数加1就可以直接输出了。

二  。如果0是最后一位,前面有比9小的数,那个数+1,后面全输出0即可

三  。如果0是最后一位,前面没有比9小的那直接在最前面加1,后面全输出0即可。

四  。如果0后面没有比9小的,那直接把0位置变成1,后面都变成0输出即可。

2.如果是有多个0的话

一。如果在最右0之后有比9小的数,那直接那个数+1 输出答案即可。

二。如果没有的话,那就直接把这个位置的0变成1,后面全部输出0即可。

3。就是比较一般的情况

这种是比较简单的。统计因子2 3 5 7 出现的次数。

因为4可以由 2×2   组成,6可以由 2×3 组成  8 9都可以组成,所以只要保留素数因子即可。

然后直接从后往前面遍历,用直接已经有的因子数,看能不能组成比这个大的,如果可以的话,高位直接不动,这个位置变成这个数。

然后从最后一位开始,把当前拥有因子能组成的最大数组合起来,一个一个往前放,没有因子的话,那都放1就可以了,然后输出答案即可。

如果都没有可能的话,那在这个数前面加1即可。!!!!!!!!!!

!!!!!!!!

比如111126

一开始 a[2]=a[3]=a[5]=a[7]=0;

然后6遍历到6,a[2]++,a[3]++;

因为没有能组成比6 大.

然后遍历2这个时候a[2]=2,a[3]=1;

能组成3那这个位置就放3此时a[2]=2,a[3]=0;

最后一个变成4输出答案即可。

上代码!

#include<string>
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int a[15],b[15];int f() {if(a[3]>=2) { a[3]-=2; return 9;}else if(a[2]>=3) { a[2]-=3; return 8;}else if(a[7]>=1) { a[7]-=1; return 7;}else if(a[2]>=1&&a[3]>=1) { a[2]-=1; a[3]-=1;return 6;}else if(a[5]>=1) { a[5]-=1; return 5; }else if(a[2]>=2) { a[2]-=2; return 4; }else if(a[3]>=1) { a[3]-=1; return 3; }else if(a[2]>=1) { a[2]-=1; return 2; }else return 1;
}int fit(int num) {if(num==9&&a[3]>=2) { return 1; }else if(num==8&&a[2]>=3) { return 1; }else if(num==7&&a[7]>=1) { return 1;}else if(num==6&&a[3]>=1&&a[2]>=1) { return 1; }else if(num==5&&a[5]>=1) { return 1;}else if(num==4&&a[2]>=2) { return 1;}else if(num==3&&a[3]>=1) { return 1; }else if(num==2&&a[2]>=1) { return 1;}else return 0;
}
void add(int num)
{if(num%2==0) {if(num==6) { a[2]++; a[3]++; return ; }int temp=num;while(temp!=1&&temp%2==0) {a[2]++;temp/=2;}}else if(num%3==0) {int temp=num;while(temp!=1&&temp%3==0) {a[3]++;temp/=3;}}else if(num%5==0) {int temp=num;while(temp!=1&&temp%5==0) {a[5]++;temp/=5;}}else if(num%7==0) {int temp=num;while(temp!=1&&temp%7==0) {a[7]++;temp/=7;}}
}
void dd(int num)
{if(num%2==0) {if(num==6) { a[2]--; a[3]--; return ;}int temp=num;while(temp!=1&&temp%2==0) {a[2]--;temp/=2;}}else if(num%3==0) {int temp=num;while(temp!=1&&temp%3==0) {a[3]--;temp/=3;}}else if(num%5==0) {int temp=num;while(temp!=1&&temp%5==0) {a[5]--;temp/=5;}}else if(num%7==0) {int temp=num;while(temp!=1&&temp%7==0) {a[7]--;temp/=7;}}
}int main()
{//freopen("in","r",stdin);//freopen("out","w",stdout);int n;scanf("%d",&n);getchar();for(int ww=1; ww<=n; ww++) {char str[10005];gets(str);int i,l=strlen(str);int num[10005],flag=0;for(i=0; i<l; i++) {num[i]=str[i]-'0';if(num[i]==0) flag++;}for(i=0; i<10; i++) a[i]=0;int rere;if(flag==1) {int ff=0,f_f;for(i=l-1; i>=0; i--) {if(num[i]!=0) {if(num[i]<9) {ff=1;rere=i;break;}}else{f_f=i;}}if(ff) {if(f_f<rere){num[rere]++;for(i=0; i<=rere; i++) printf("%d",num[i]);for(; i<l; i++) printf("0");}else{if(f_f!=l-1){num[f_f]=1;for(i=0;i<=f_f;i++) printf("%d",num[i]);for(;i<l;i++) printf("0");}else{num[rere]++;for(i=0; i<=rere; i++) printf("%d",num[i]);for(; i<l; i++) printf("0");}}}else {if(f_f==l-1) {printf("1");for(i=0; i<l; i++) printf("0");}else{num[f_f]=1;for(i=0;i<=f_f;i++) printf("%d",num[i]);for(;i<l;i++) printf("0");}}}else if(flag>1) {int ff=0;for(i=l-1; i>=0; i--) {if(num[i]==0) {num[i]++;ff=1;rere=i;break;}if(num[i]!=0) {if(num[i]<9) {num[i]++;ff=1;rere=i;break;}}}if(ff) {for(i=0; i<=rere; i++) printf("%d",num[i]);for(; i<l; i++) printf("0");}else {printf("1");for(i=0; i<l; i++) printf("%d",num[i]);}}else {int j,fnow=0;for(i=l-1; i>=0; i--) {add(num[i]);for(j=num[i]+1;j<=9;j++){if(fit(j)){num[i]=j;dd(j);for(j=l-1;j>i;j--){num[j]=f();}fnow=1;break;}}if(fnow) break;}if(fnow) {for(i=0; i<l; i++) printf("%d",num[i]);}else {printf("1");for(i=0; i<l; i++) printf("%d",num[i]);}}printf("\n");}return 0;
}

zoj 3327 Friend Number 模拟题相关推荐

  1. Gym 100646 Problem C: LCR 模拟题

    Problem C: LCR 题目连接: http://codeforces.com/gym/100646/attachments Description LCR is a simple game f ...

  2. 2011年全国软件大赛模拟题及参考答案(Java高职组)

    2011年全国软件大赛模拟题及参考答案(Java高职组) 不是官方的答案,如有不妥,请指出. 2011 模拟 java 高职 注意: 本套模拟题主要模拟命题形式与考核范围.真实竞赛题的数量.难度可能与 ...

  3. 中国石油大学《大学英语(三)统考》第二套模拟题

    第二套模拟题 单选题 (共25道题) 收起 1.(4.0分) 1.- We are planning an outing. _________ - Sure. A.Where are you goin ...

  4. csp模拟题-炉石传说

    题目 试题编号: 201609-3 试题名称: 炉石传说 时间限制: 1.0s 内存限制: 256.0MB 问题描述: <炉石传说:魔兽英雄传>(Hearthstone: Heroes o ...

  5. ZJUT online OJ c++通关模拟题(problem1335-problem1516) 题解

    祝各位通关考AK奥利给 注意事项: 1.多组数据 2.行末有无空格 3.初始化 网址:Welcome To ZJUT Online Judge 目录 网址:Welcome To ZJUT Online ...

  6. 计算机软件专业英语考试题,计算机水平考试-软件设计师分类模拟题计算机专业英语(二)...

    计算机水平考试-软件设计师分类模拟题计算机专业英语(二) (4页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 9.9 积分 MIDI enables pe ...

  7. 网络教育专科计算机考试试题电子科大,电子科技大学网络教育专科英语(理)入学考试模拟题及答案...

    电子科技大学网络教育专科英语(理)入学考试模拟题及答案 一.选择题 37. The number of students in our school ________. A increased B i ...

  8. 考研复试题 计算机接口原理,微机原理及接口技术考研模拟题一-微机原理与接口技术.DOC...

    微机原理及接口技术考研模拟题一-微机原理与接口技术 附录c < 微机原理及接口技术 >考研模拟题(一) 一.判断题:(正确题在括号内画√,错误画X.每小题 1分,共 10 分) 1.Pen ...

  9. 第二届 “国信蓝点”软件设计大赛 C语言模拟题(附程序题 解题程序)

    第二届 "国信蓝点"软件设计大赛 C语言模拟题 一 .以下是简答题: 1.代码填空 形如:"abccba","abcba"的串称为回文串,下 ...

最新文章

  1. Java AQS论文翻译
  2. 我要是长得和姚明一样高,是不是也能打进NBA?
  3. android插上耳机仍用扬声器播放音频
  4. 搭建hypervisor类型为VMWare的cloudstack环境
  5. 评论:巴菲特“天价午餐”值吗?
  6. 【Docker】安装MySQL彻底解决3306端口占用问题
  7. 操作Zookeeper
  8. 论文笔记_S2D.39_2015-ICCV-条件随机场作为递归神经网络(CRF-RNN)
  9. 深入理解Android音频框架AudioTrack到AudioFlinger及Mix过程
  10. Spring-外部配置的值是如何通过@Value注解获取的?
  11. 超简单漂浮广告代码、网页漂浮广告代码、jQuery漂浮广告、div漂浮层
  12. 一文搞懂如何使用STM32驱动直流电机(普通PWM输出和L298N、高级定时器输出带死区双通道互补PWM和IR2110S及自举电路、H桥电路和电机正反转)
  13. 计算机 无法连接wifi网络地址,电脑设置wifi但无法连接网络怎么办
  14. Turtle库画小猫咪
  15. 魔兽争霸3冰封王座 对战初始化被禁止
  16. html监控页面大小,JQuery实时监控窗口大小(无需插件)
  17. php实现狼和兔子,兔子和狼作文4篇
  18. 谈谈水印实现的几种方式
  19. AI Chip(一)
  20. shell脚本及举例:依次创建10个目录在相应目录下创建10个文件,在相应文件下添加内容

热门文章

  1. TCP发送接口(如send(),write()等)的返回值与成功发送到接收端的数据量无直接关系
  2. Python 让所有奇数都在偶数前面,而且奇数升序排列,偶数降序排序
  3. 记一次OpenJDK替换java JDK
  4. Linux网络IO精华指南
  5. 程序员十大心愿,程序员:你这么了解我的心声的嘛!
  6. Flutter实现帧动画
  7. OS- -I/O之盘和时钟
  8. JQuery属性、事件相关操作
  9. C/C++学习之路: 多态
  10. FFmpeg代码导读系列(一,下半部)----HEVC在RTMP中的扩展