[Swust OJ 179]--火柴棍(找规律)

题目链接:http://acm.swust.edu.cn/problem/0179/

Time limit(ms): 1000      Memory limit(kb): 65535

Description

火柴棍可以拼成10进制的数字,如图所示:

现在,gogo给你个n个火柴棍,要求你输出最小能拼成的数字和最大能拼成的数字。

Input

第一行输入一个整数T:T组测试数据(T<100)

每行输入一个n (2 ≤ n ≤ 100): 表示你有的火柴棍数。

Output

最小能拼成的数字和最大能拼成的数字, 用一个空格分开. 没有前导0.

Sample Input


4

3

6

7

15

Sample Output


7 7

6 111

8 711

108 7111111

解题思路:最大值就是凑成7或1,偶数根全为1,奇数根火柴拼一个7,至于最小值,我是找的规律前17根火柴直接找出来的(如下表)

     发现18根火柴得到最小208,19根288,20根688,满足x[i]=x[i-7]*10+8,提交了一下果然过了Orz~~~

0 1  2  3  4  5  6  7   8   9 10 11 12 13 14 15 16 17
 0  0  1  7  4  2  6  8 10 18 22 20 28 68 88 108 188 200

代码如下:

 1 #include <iostream>
 2 using namespace std;
 3 long long a[105] = { 0, 0, 1, 7, 4, 2, 6, 8, 10, 18, 22, 20, 28, 68, 88, 108, 188, 200 };
 4 void init(){
 5     for (int i = 18; i <= 105; ++i){
 6         a[i] = a[i - 7] * 10 + 8;
 7     }
 8 }
 9 int main(){
10     int t, n;
11     cin >> t;
12     init();//没有加这一句,将答案算出,贡献一次wa
13     while (t--)
14     {
15         cin >> n;
16         cout << a[n] << ‘ ‘;
17         while (n){
18             if (n & 1){
19                 cout << 7;
20                 n -= 3;
21             }
22             else{
23                 cout << 1;
24                 n -= 2;
25             }
26         }
27         cout << endl;
28     }
29     return 0;
30 }

时间: 2024-11-03 01:36:31

[Swust OJ 179]--火柴棍(找规律)的相关文章

[Swust OJ 552]--拼音教学(找规律)

题目链接:http://acm.swust.edu.cn/problem/0552/ Time limit(ms): 1000 Memory limit(kb): 65535 Description 数钱啦~~~输入一个数字,小于999999999999,我们需要把他们转换为拼音,我们规定例如1234000567的念为“1十2亿3千4百万零5百6十7”具体见输入输出 Input 一个数字N Output 数字加拼音,见SAMPLE OUTPUT Sample Input 999999999999

[Swust OJ 666]--初来乍到(题号都这么溜~~,递归,找规律)

题目链接:http://acm.swust.edu.cn/problem/0666/ Time limit(ms): 1000 Memory limit(kb): 65535 Description 小李去埃及旅游,但是初来乍到的他不认识罗马数,所以请你将阿拉伯数n ( 0 < n <= 1000)改写为罗马数. Input N行数据,每行一个满足0 < n <= 1000的数: 结束以EOF判断 Output 每行一个,见输出示例 Sample Input 1 10 35 99

swust oj 1026--Egg pain&#39;s hzf

题目链接:http://acm.swust.edu.cn/problem/1026/ Time limit(ms): 3000 Memory limit(kb): 65535 hzf is crazy about reading math recently,and he is thinking about a boring problem. Now there are n integers Arranged in a line.For each integer,he wants to know

火柴棍移动的一道面试题

最近有朋友找工作,面试某公司,遇到一个火柴棍移动的面试题,感觉有点意思,在此抛砖引玉. 题目大致是这样的: 一个三个数的式子,移动其中一根火柴,使等式成立,用程序或实现(可以用伪码),输出能成立的等式. 注:"+"可以移走一根火柴变成"-" 例如: 废话不说,直接上代码,哪位网友有更好的方法,请分享一下,多谢 #include <stdio.h> /* 定义操作符号,"+"或"-" */ #define SYMBO

火柴棍等式

问题描述: 现在小明有n根火柴棍,希望拼出如 A+B=C 的等式.等式中的A.B.C均是用火柴棍拼出来的整数(若该数非零,则最高位不能是0).数字0~9的拼法如图所示: 注意: 加号与等号各自需要两根火柴棍. 如果 A≠B ,则 A+B=C 与 B+A=C 视为不同的等式(A.B.C都大于0). 所有的火柴棍必须全部用上. 假如现在小明手上有m根(m ≤ 24)火柴棍,那么小明究竟可以拼出多少个不同的形如 A+B=C 的等式呢? 分析: 1,既然要找出形如A+B=C这样的等式,那最简单的办法就是

FZOJ 1036 四塔问题(找规律)

OJ题目:click here~~ 题目分析:四塔问题,n个盘,从塔1,到塔4,至少需要多少步. 这里n的范围是( 0  ,  50000 ] ,所以不能直接用四塔算法.这里找规律就可以了. AC_CODE const int mod = 10000; const int Max_N = 50002; int dp[Max_N]; int main() { int i , j = 0, k = 2, t = 2; dp[1] = 1; for(i = 2;i <= Max_N-2;i++){ j

[Swust OJ 404]--最小代价树(动态规划)

题目链接:http://acm.swust.edu.cn/problem/code/745255/ Time limit(ms): 1000 Memory limit(kb): 65535 Description 以下方法称为最小代价的字母树:给定一正整数序列,例如:4,1,2,3,在不改变数的位置的条件下把它们相加,并且用括号来标记每一次加法所得到的和. 例如:((4+1)+ (2+3))=((5)+(5))=10.除去原数不4,1,2,3之外,其余都为中间结果,如5,5,10,将中间结果相加

1002. [FJOI2007]轮状病毒【找规律+递推】

Description 轮状病毒有很多变种,所有轮状病毒的变种都是从一个轮状基产生的.一个N轮状基由圆环上N个不同的基原子 和圆心处一个核原子构成的,2个原子之间的边表示这2个原子之间的信息通道.如下图所示 N轮状病毒的产生规律是在一个N轮状基中删去若干条边,使得各原子之间有唯一的信息通道,例如共有16个不 同的3轮状病毒,如下图所示 现给定n(N<=100),编程计算有多少个不同的n轮状病毒 Input 第一行有1个正整数n Output 计算出的不同的n轮状病毒数输出 Sample Inpu

8/2 multi4 E找规律+模拟,空间开小了然后一直WA。。。J爆搜check不严谨WA。。。multi3 G凸包判共线写错数组名???样例太好过.想哭jpg。

multi4 Problem E. Matrix from Arrays 题意:构造一个数组,求子矩阵前缀和. 思路:打表找规律,"发现"L为奇数时循环节为L,为偶数时循环节为2L,求相应循环节的二维前缀和然后加加减减计算一下就好. 虚伪地证明一下循环节:L为奇数时对于第x行/列开始的位置有(x  +  x+L-1)*L/2   ->     (2x+L-1)/2(为整数)*L,因此扫过L行/列也就扫过了L整数倍"(2x+L-1)/2"倍的A[0]~A[L],