用天梯赛打开暑假生活的第九天

发布时间 2023-07-02 22:03:25作者: 寒心小呆

从坐牢到入门的程序设计(9)

开始时间2023-07-02 20:13:50

结束时间2023-07-02 21:58:00

前言:不会还有人不知道我科三过了吧!

L1-039 古风排版

一、题目编号及题目说明

二、程序功能测试及说明

  按古风格式排版给定的字符串,每列N个字符。

三、程序设计思路及结构说明

  将输入文本按照每列 N 个字符进行排列,并以列为主的方式输出的程序。它使用了二维向量 grid 来存储输入文本的每个字符,并根据输入的行数和列数进行排列。然后,从最后一列开始逐列输出。

四、程序源代码

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int N;
    cin >> N;
    string text;
    cin.ignore();
    getline(cin, text);
    int len = text.length();
    int rows = (len + N - 1) / N;
    vector<vector<char>> grid(rows, vector<char>(N, ' '));
    for (int i = 0; i < len; ++i) {
        int row = i / N;
        int col = i % N;
        grid[row][col] = text[i];
    }
    for (int i = 0; i < N; ++i) {
        for (int j = rows - 1; j >= 0; --j) {
            cout << grid[j][i];
        }
        cout << endl;
    }

    return 0;
}

五、题目评分

 L1-040 最佳情侣身高差

一、题目编号及题目说明

二、程序功能测试及说明

  用于计算情侣的身高差。

三、程序设计思路及结构说明

  它读取输入的用户数量,然后循环处理每个用户的查询,根据性别和身高计算出情侣的最佳身高差,并将结果输出。

四、程序源代码

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int n;
    cin>>n;
    int i=0;
    for(i=0;i<n;i++)
    {
        char p;
        float a;
        cin>>p>>a;
        if(p=='M')
        {
            printf("%.2f\n",a/1.09);
        }
        else printf("%.2f\n",a*1.09);
    }
    return 0;
}

五、题目评分

 L1-041 寻找250

一、题目编号及题目说明

二、程序功能测试及说明

  从输入中寻找值为250的数字,并输出其位置(即第几个数字)。

三、程序设计思路及结构说明

  代码使用循环遍历输入数字,当找到值为250的数字时,输出当前位置并跳出循环。

四、程序源代码

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int i=0;
    for(i=0;i<10000;i++)
    {
        int a;
        cin>>a;
        if(a==250)
        {
            printf("%d\n",i+1);
            break;
        }
    }
    return 0;
}

五、题目评分

 L1-042 日期格式化

一、题目编号及题目说明

二、程序功能测试及说明

  将输入的字符串按照一定格式进行重新排列。

三、程序设计思路及结构说明

  代码使用 getline 函数读取输入的字符串,并使用 substr 函数将其拆分为三个部分 a、b 和 c。然后,代码按照指定的格式输出重新排列后的字符串。

四、程序源代码

#include<bits/stdc++.h>
using namespace std;
int main()
{
    string p;
    getline(cin,p);
    string a,b,c;
    a=p.substr(0, 2);
    b=p.substr(3, 2);
    c=p.substr(6, 4);
    cout<<c<<"-"<<a<<"-"<<b<<endl;
    return 0;
}

五、题目评分

 L1-043 阅览室

一、题目编号及题目说明

二、程序功能测试及说明

   处理预定时间的记录并计算每个预定时间段的平均时长。

三、程序设计思路及结构说明

代码使用一个书籍结构体数组 BOOK 来保存每个预定时间段的信息。

代码首先读取输入的整数 n,表示预定时间的记录数量。然后使用循环遍历每条记录,并按照格式读取预定号、状态、开始时间和结束时间。在循环中,根据不同的状态和预定号,更新书籍数组中对应位置的预定状态和开始/结束时间。

最后,根据预定时间的统计数据,输出每个预定时间段的数量和平均时长。

四、程序源代码

#include <iostream>
#include <cstdio>
using namespace std;const int N = 1010;    
int Time(int bhour, int bmin, int ehour, int emin);    
typedef struct
{
    int hour;    
    int min;    
    char state = 'E';    
}BOOK;
int main()
{
    int n; cin >> n;    
    BOOK book[N];    
    for(int i=0; i<n;i++)    
    {
        int num;    
        char flag;
        int hour, min;    
        int count = 0;    
        int time = 0;    
        scanf("%d %c %d:%d", &num, &flag, &hour, &min);    
        while (num)    
            {
                if(flag == 'S' && book[num].state == 'E')    
                 {
                     book[num].hour = hour;    
                     book[num].min = min;    
                     book[num].state = flag;    
              }
            else if (flag == 'E' && book[num].state == 'S')    
             {
                 time += Time(book[num].hour, book[num].min, hour, min);    
                    count++;    
                  book[num].state = flag;
              }else if (flag == 'S' && book[num].state == 'S')    
             {
                book[num].hour = hour;    
              book[num].min = min;    
              }
            else if (flag == 'E' && book[num].state == 'E');
          scanf("%d %c %d:%d", &num, &flag, &hour, &min);    
          }
     if (count) 
         printf("%d %d\n", count, int(time*1.0 / count + 0.5));    
     else printf("0 0\n");    
     }
    return 0;
}
int Time(int bhour, int bmin, int ehour, int emin)
{
    return ((ehour - bhour) * 60 + (emin - bmin));
}

五、题目评分

 L1-044 稳赢

一、题目编号及题目说明

二、程序功能测试及说明

  实现了一个猜拳游戏,根据输入的指令进行不同的操作。

三、程序设计思路及结构说明

代码首先读取一个整数 k,并将其增加 1。然后进入一个循环,在每次循环中读取一个字符串 p。

如果读取到的字符串是 "End",则跳出循环。如果循环次数不为0且能被 k 整除,则输出字符串 p。否则,根据不同的输入字符串 p 输出相应的指令:"ChuiZi" 对应 "Bu","Bu" 对应 "JianDao","JianDao" 对应 "ChuiZi"。

四、程序源代码

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int k;
    cin>>k;
    k+=1;
    int i=0;
    for(i=1;i<20000;i++)
    {
        string p;
        cin>>p;
        if(p=="End")
        {
            break;
        }
        if(i!=0&&i%k==0)
        {
            cout<<p<<endl;
        }
        else if(p=="ChuiZi")
        {
            printf("Bu\n");
        }
        else if(p=="Bu")
        {
            printf("JianDao\n");
        }
        else if(p=="JianDao")
        {
            printf("ChuiZi\n");
        }
    }
    
}

 五、题目评分

 L1-045 宇宙无敌大招呼

一、题目编号及题目说明

二、程序功能测试及说明

  在一行中输出Hello S,跟输入的S星球打个招呼。

三、程序设计思路及结构说明

读取一个字符串 p,然后输出一个问候语 "Hello ",最后再输出字符串 p 的内容。

代码没有进行循环或其他逻辑操作,只是简单地读取输入并输出结果。

四、程序源代码

#include<bits/stdc++.h>
using namespace std;
int main()
{
    string p;
    cin>>p;
    printf("Hello ");
    cout<<p<<endl;
    
}

五、题目评分

 总结:要骗过别人,先骗过自己。———悟by《长安三万里》

每日一mo:你说她真的不知道么?