天梯赛训练精选实例(三)

简介: 天梯赛训练精选实例(三)

L1-033 出生年

输入在一行中给出出生年份y和目标年份中不同数字的个数n,其中y在[1, 3000]之间,n可以是2、或3、或4。注意不足4位的年份要在前面补零,例如公元1年被认为是0001年,有2个不同的数字0和1。

输出格式:

根据输入,输出x和能达到要求的年份。数字间以1个空格分隔,行首尾不得有多余空格。年份要按4位输出。注意:所谓“n个数字都不相同”是指不同的数字正好是n个。如“2013”被视为满足“4位数字都不同”的条件,但不被视为满足2位或3位数字不同的条件。

输入样例1:

1988 4

输出样例1:

25 2013

输入样例2:

1 2

输出样例2:

0 0001

核心思路:

巧妙运用set容器中不存放重复元素的特性

代码

#include<iostream>
#include<iomanip>
#include<string>
#include<set>
using namespace std;
int main()
{
    int y, n;
    cin >> y >> n;
    for (int i = y; i != 0; i++)
    {
        set<char>rank;
        if(i<1000)  rank.insert('0');
        string s = to_string(i);
        for (int i = 0; i < s.length(); i++)
        {
            rank.insert(s[i]);
        }
        int a = rank.size();
        if (a == n)
        {
            cout << i - y << " ";
            cout << setw(4) << setfill('0') << i;
            break;
        }
    }
}

L1-039 古风排版

中国的古人写文字,是从右向左竖向排版的。本题就请你编写程序,把一段文字按古风排版。

输入格式:

输入在第一行给出一个正整数N(<100),是每一列的字符数。第二行给出一个长度不超过1000的非空字符串,以回车结束。

输出格式:

按古风格式排版给定的字符串,每列N个字符(除了最后一列可能不足N个)。

输入样例:

4
This is a test case

输出样例:

asa T
st ih
e tsi
 ce s

核心思路:

将其转化为一个矩阵,并填满

代码

#include<iostream>
#include<iomanip>
#include<string>
using namespace std;
int main() {
    int n;
    string s;
    cin >> n;
    getchar();
    getline(cin, s);
    int more = s.length() % n;
    int m = s.length() / n;
    if (more != 0)
    {
        for (int i = n; i > more; i--)
        {
            s = s + " ";
        }
        m++;
    }
    for (int i = 0; i < n; i++)
    {
        for (int j = 1; j <= m; j++)
        {
            cout << s[(m - j) * n + i];
        }
        cout << endl;
    }
}

L1-046 整除光棍

这里所谓的“光棍”,并不是指单身汪啦~ 说的是全部由1组成的数字,比如1、11、111、1111等。传说任何一个光棍都能被一个不以5结尾的奇数整除。比如,111111就可以被13整除。 现在,你的程序要读入一个整数x,这个整数一定是奇数并且不以5结尾。然后,经过计算,输出两个数字:第一个数字s,表示x乘以s是一个光棍,第二个数字n是这个光棍的位数。这样的解当然不是唯一的,题目要求你输出最小的解。

提示:一个显然的办法是逐渐增加光棍的位数,直到可以整除x为止。但难点在于,s可能是个非常大的数 —— 比如,程序输入31,那么就输出3584229390681和15,因为31乘以3584229390681的结果是111111111111111,一共15个1。

输入格式:

输入在一行中给出一个不以5结尾的正奇数x(<1000)。

输出格式:

在一行中输出相应的最小的sn,其间以1个空格分隔。

输入样例:

31

输出样例:

3584229390681 15

核心思路 :

由于的出的书很可能比较大,因此要简化算法,联想到我们平时算除法的方法

代码

#include<iostream>
using namespace std;
int main()
{
  int x;
  int num=1, b=1;
  cin >> x;
  while (b <x)
  {
    b = b * 10 + 1;
    num++;
  }
  while (b % x != 0)
  {
    cout << b / x;
    b = (b % x) * 10 + 1;
    num++;
  }
  cout << b / x << " " << num;
}

L1-050 倒数第N个字符串

给定一个完全由小写英文字母组成的字符串等差递增序列,该序列中的每个字符串的长度固定为 L,从 L 个 a 开始,以 1 为步长递增。例如当 L 为 3 时,序列为 { aaa, aab, aac, ..., aaz, aba, abb, ..., abz, ..., zzz }。这个序列的倒数第27个字符串就是 zyz。对于任意给定的 L,本题要求你给出对应序列倒数第 N 个字符串。

输入格式:

输入在一行中给出两个正整数 L(2 ≤ L ≤ 6)和 N(≤105)。

输出格式:

在一行中输出对应序列倒数第 N 个字符串。题目保证这个字符串是存在的。

输入样例:

3 7417

输出样例:

pat

核心思路:

本质就是一个26进制,每一个字母代表0-25中的一个数。

代码

#include<iostream>
using namespace std;
int main()
{
    int n,a,sum=1;
    cin>>n>>a;
    string str;
    for(int i=1;i<=n;i++)
    {
        str=str+"a";
        sum=sum*26;
    }
    sum=sum-a;
    while(sum/26!=0)
    {
        n--;
        str[n]='a'+sum%26;
        sum=sum/26;
    }
    n--;
    str[n]='a'+sum;
    cout<<str<<endl;
    return 0;
}

L1-054 福到了

“福”字倒着贴,寓意“福到”。不论到底算不算民俗,本题且请你编写程序,把各种汉字倒过来输出。这里要处理的每个汉字是由一个 N × N 的网格组成的,网格中的元素或者为字符 @ 或者为空格。而倒过来的汉字所用的字符由裁判指定。

输入格式:

输入在第一行中给出倒过来的汉字所用的字符、以及网格的规模 N (不超过100的正整数),其间以 1 个空格分隔;随后 N 行,每行给出 N 个字符,或者为 @ 或者为空格。

输出格式:

输出倒置的网格,如样例所示。但是,如果这个字正过来倒过去是一样的,就先输出bu yong dao le,然后再用输入指定的字符将其输出。

输入样例 1:

$ 9
 @  @@@@@
@@@  @@@ 
 @   @ @ 
@@@  @@@ 
@@@ @@@@@
@@@ @ @ @
@@@ @@@@@
 @  @ @ @
 @  @@@@@

输出样例 1:

$$$$$  $ 
$ $ $  $ 
$$$$$ $$$
$ $ $ $$$
$$$$$ $$$
 $$$  $$$
 $ $   $ 
 $$$  $$$
$$$$$  $ 

输入样例 2:

& 3
@@@
 @ 
@@@

输出样例 2:

bu yong dao le
&&&
 & 
&&&

代码

#include<iostream>
#include<string>
#include<iomanip>
#include<algorithm>
using namespace std;
int main()
{
    char a;
    int n;
    int max=0;
    cin>>a >> n;
    string yuan[100],fan[100];
    getchar();
    for (int i = 0; i <n; i++)
    {
        getline(cin, yuan[i]);
        fan[n - i - 1] = yuan[i];
        reverse(fan[n - i - 1].begin(), fan[n - i - 1].end());
    }
    int sum = 0;
    for (int i = 0; i < n / 2; i++)
    {
        if (yuan[i] != fan[i])
        {
            sum = 1;
            break;
        }
    }
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < fan[i].length(); j++)
        {
            if (fan[i][j] != ' ')fan[i][j] = a;
        }
    }
    if (sum == 0)
    {
        cout << "bu yong dao le" << endl;
        for (int i = 0; i < n; i++)
        {
            cout << fan[i] << endl;
        }
    }
    else
    {
        for (int i = 0; i < n; i++)
        {
            cout << fan[i] << endl;
        }
    }
}

L1-058 6翻了(极佳的掌握string功能函数的例题!)

“666”是一种网络用语,大概是表示某人很厉害、我们很佩服的意思。最近又衍生出另一个数字“9”,意思是“6翻了”,实在太厉害的意思。如果你以为这就是厉害的最高境界,那就错啦 —— 目前的最高境界是数字“27”,因为这是 3 个 “9”!

本题就请你编写程序,将那些过时的、只会用一连串“6666……6”表达仰慕的句子,翻译成最新的高级表达。

输入格式:

输入在一行中给出一句话,即一个非空字符串,由不超过 1000 个英文字母、数字和空格组成,以回车结束。

输出格式:

从左到右扫描输入的句子:如果句子中有超过 3 个连续的 6,则将这串连续的 6 替换成 9;但如果有超过 9 个连续的 6,则将这串连续的 6 替换成 27。其他内容不受影响,原样输出。

输入样例:

it is so 666 really 6666 what else can I say 6666666666

输出样例:

it is so 666 really 9 what else can I say 27

代码

#include<iostream>
#include<iomanip>
#include<string>
using namespace std;
int main()
{
    string word;
    getline(cin,word);
     int b=word.find("6666666666");
    while(b!=-1)
    {
        int n=10;
        while(word[b+n]=='6')
        {
            n++;
        }
        word.replace(b,n,"27");
        b=word.find("6666666666");
    }
    int c=word.find("6666");
    while(c!=-1)
    {
        int n=4;
        while(word[c+n]=='6')
        {
            n++;
        }
        word.replace(c,n,"9");
        c=word.find("6666");
    }
    cout<<word;
}


相关文章
|
机器学习/深度学习 算法 数据挖掘
阿里音乐流行趋势预测—冠军答辩(一)|学习笔记
快速学习阿里音乐流行趋势预测—冠军答辩(一)
858 0
|
数据采集 机器学习/深度学习 算法
阿里音乐流行趋势预测—冠军答辩(二)|学习笔记
快速学习阿里音乐流行趋势预测—冠军答辩(二)
471 0
|
4月前
|
物联网 开发者
可图Kolors-LoRA风格故事挑战赛决赛入围名单出炉!决赛赛题首公开,奉上夺奖秘籍!
8月初,魔搭社区联合阿里云天池平台,结合快手旗下开源文生图大模型可图Kolors 模型,推出文生图创作大赛,30支队伍脱颖而出,晋级复赛。
可图Kolors-LoRA风格故事挑战赛决赛入围名单出炉!决赛赛题首公开,奉上夺奖秘籍!
|
8月前
西安石油大学校赛培训(1)数学模型简介 初等模型
西安石油大学校赛培训(1)数学模型简介 初等模型
46 0
天梯赛训练精选实例(二)
天梯赛训练精选实例(二)
天梯赛训练精选实例(一)
天梯赛训练精选实例(一)
127 0
|
数据采集 SQL 算法
阿里音乐流行趋势预测—亚军答辩(一)|学习笔记
快速学习阿里音乐流行趋势预测—亚军答辩(一)
445 0
|
机器学习/深度学习 C++
百度飞桨世界冠军带你从零实践强化学习第四天(三岁白话时间)
这里是三岁,这里吧第四的素材和资料整理了一下,大家康康,有什么不足的欢迎提出,批评指正!!!
161 0
百度飞桨世界冠军带你从零实践强化学习第四天(三岁白话时间)
|
算法 大数据 开发者
阿里音乐流行趋势预测—亚军答辩(二)|学习笔记
快速学习阿里音乐流行趋势预测—亚军答辩(二)
259 0
|
机器学习/深度学习 Python
ML之预测:玩转2018世界杯—采用机器学习预测小组赛、十六比赛、四决赛、半决赛、决赛以及世界杯总冠军的各个队伍
ML之预测:玩转2018世界杯—采用机器学习预测小组赛、十六比赛、四决赛、半决赛、决赛以及世界杯总冠军的各个队伍
ML之预测:玩转2018世界杯—采用机器学习预测小组赛、十六比赛、四决赛、半决赛、决赛以及世界杯总冠军的各个队伍