hdu 2772Matchsticks(模拟题)
来源:互联网 发布:大数据可视化论文 编辑:程序博客网 时间:2024/05/22 03:48
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2772
题目大意: 用火柴拼出0到9的数字:
数字: 1 2 3 4 5 6 7 8 9 0
火柴数: 2 5 5 4 5 6 3 7 6 6
给出n条火柴,问能够拼出的数字中最小和最大分别是多少?
解题思路: 简单的模拟题(由于数字太大,打表不了):
1.拼出的数字最小,就要使用 需要火柴数较多 的数字,使得这串数字总位数最小;
2.拼出的数字最大,则使用 需要火柴数较少 的数字,使得这串数字总位数最大:
看数字7和数字1,他们所需的火柴数最小,并且2和3相差1,可以凑成任意的n (n>=2) ;
把n=22之前的都打印出来就可以很容易的找到规律了:
n=2 1 1
n=3 7 7
n=4 4 11
n=5 2 71
n=6 6 111
n=7 8 711
n=8 10 1111
n=9 18 7111
n=10 22 11111
n=11 20 71111
n=12 28 111111
n=13 68 711111
n=14 88 1111111
n=15 108 7111111
n=16 188 11111111
n=17 200 71111111
n=18 208 111111111
n=19 288 711111111
n=20 688 1111111111
n=21 888 7111111111
n=22 1088 11111111111
n=23 1888 71111111111
n=24 2008 111111111111
n=25 2088 711111111111
n=26 2888 1111111111111
n=27 6888 7111111111111
n=28 8888 11111111111111
n=29 10888 71111111111111
n=30 18888 111111111111111
n=31 20088 711111111111111
n=32 20888 1111111111111111
n=33 28888 7111111111111111
n=34 68888 11111111111111111
n=35 88888 71111111111111111
n=36 108888 111111111111111111
n=37 188888 711111111111111111
n=38 200888 1111111111111111111
n=39 208888 7111111111111111111
n=40 288888 11111111111111111111
n=41 688888 71111111111111111111
n=42 888888 111111111111111111111
最小的数:
从15开始周期T=7,每个元素分别是108 188 200 208 288 688 888,每加一个周期多一个8;
最大的数:
从2开始 周期T=2,每个元素分别是1 7,每加一个周期多一个1;
代码:
#include <stdio.h>int main(){ int t,n,m,i,j,temp,bs1,ys1,bs2,ys2; scanf("%d",&t); while(t--) { scanf("%d",&n); if(n<=1) return 0; if(n==2) printf("1 1\n"); else if(n==3) printf("7 7\n"); else if(n==4) printf("4 11\n"); else if(n==5) printf("2 71\n"); else if(n==6) printf("6 111\n"); else if(n==7) printf("8 711\n"); else if(n==8) printf("10 1111\n"); else if(n==9) printf("18 7111\n"); else if(n==10) printf("22 11111\n"); else if(n==11) printf("20 71111\n"); else if(n==12) printf("28 111111\n"); else if(n==13) printf("68 711111\n"); else if(n==14) printf("88 1111111\n"); else { bs1=(n-15)/7; //最大数的周期数 ys1=(n-14)%7; //最大数的周期中第几个元素 if(ys1==1) printf("108"); else if(ys1==2) printf("188"); else if(ys1==3) printf("200"); else if(ys1==4) printf("208"); else if(ys1==5) printf("288"); else if(ys1==6) printf("688"); else if(ys1==0) printf("888"); if(bs1!=0) while(bs1--) //每加一个周期数多一个8 printf("8"); bs2=(n-2)/2; //最小数的周期数 ys2=n%2; //最小数的周期中第几个元素 printf(" "); if(ys2==0) printf("1"); else printf("7"); while(bs2--) //梅加一个周期数多一个1 printf("1"); printf("\n"); } } return 0;}
注:原创文章,转载请注明出处
- hdu 2772Matchsticks(模拟题)
- HDU2772 Matchsticks 【模拟题】
- HDU 2772 Matchsticks
- Matchsticks
- HDU 1761(模拟题,字典树)
- hdu 3233 Download Manager(模拟题)
- HDU 4452 Running Rabbits (模拟题)
- hdu 1302(简单模拟题)
- HDU - 1008 Elevator(模拟题)
- hdu 5319 Painter(模拟题)
- hdu 5071 Chat (模拟题)
- HDU 1034 分糖果 (模拟题)
- HDU 1008 Elevator(模拟题)
- HDU 1302 The Snail(模拟题)
- hdu 3269 模拟题
- HDU 4770 模拟题
- HDU 4772 模拟题
- hdu 1049 模拟题
- opencv获取感兴趣区域函数
- 管理学总论之管理者的角色和技能
- 看懂信息检索和网络数据挖掘领域论文的必备知识总结
- poj 1077 解题报告
- 反射动态加载程序集Assembly.Load和Assembley.LoadFrom
- hdu 2772Matchsticks(模拟题)
- 寒假小结
- java天天练
- 从源代码解读spring之DataSource实现和FactoryBean模式(JndiObjectFactoryBean)
- 编写正确的程序 习题4.6 3
- Android开发教程——其他的Android组件
- 控制台经典算法
- javaweb jsp自定义标签
- 动态调用 , 卸载 Assembly