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

发布时间 2023-07-06 11:15:52作者: 寒心小呆

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

开始时间2023-07-06 08:09:47

结束时间2023-07-06 11:07:16

前言:不该一早上醒来就刷题的,一整个恶心住了。

L1-056 猜数字

一、题目编号及题目说明

二、程序功能测试及说明

  先输入一个数据个数,后前为名字后为数字输出平均数的二分之一,和离该数最近的人名。

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

  1. 从标准输入中读取整数 n。
  2. 使用 getchar() 函数读取换行符。
  3. 声明一个大小为 10000 的整数数组 a 和一个大小为 10000 的字符数组 p。
  4. 使用循环依次读取 n 对字符串和整数,存储到 p 数组和 a 数组中。
  5. 计算数组 a 中所有元素的和,保存到 sum 变量中。
  6. 计算平均值 c,即 sum / n / 2。
  7. 初始化 min 和 mini 变量为数组 a 中的第一个元素和索引。
  8. 遍历数组 a,找到离平均值 c 最近的元素,并记录其值和索引。
  9. 使用 printf() 函数输出结果,格式为 "%d %s\n",依次为 c 和 p[mini]。

四、程序源代码

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int n;
    cin>>n;
    getchar();
    int a[10000];
    char p[10000][9];
    int i=0;
    for(i=0;i<n;i++)
    {
        scanf("%s %d",&p[i],&a[i]);
    }
    int c,sum=0;
    for(i=0;i<n;i++)
    {
        sum+=a[i];
    }
    c=sum/n/2;
    int min=0,mini=0;
    for(i=0;i<n;i++)
    {
        if(abs(a[i]-c)<abs(min-c))
        {
            min=a[i];
            mini=i;
        }
    }
    printf("%d %s\n",c,p[mini]);
}

五、题目评分

 L1-057 PTA使我精神焕发

一、题目编号及题目说明

二、程序功能测试及说明

程序功能为直接输出字符串,

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

无输入,直接输出字符串。

四、程序源代码

#include<bits/stdc++.h>
using namespace std;
int main()
{
    printf("PTA shi3 wo3 jing1 shen2 huan4 fa1 !\n");
    return 0;
}

五、题目评分

 L1-058 6翻了

一、题目编号及题目说明

二、程序功能测试及说明

  对输入的字符串进行处理,并进行相应的替换操作。

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

  1. 声明整数变量 p 和 cnt,用于记录字符串的索引和连续出现的字符个数。
  2. 声明字符串变量 s,使用 getline() 函数从标准输入读取一行字符串。
  3. 使用 find() 函数在字符串 s 中查找字符 '6' 的出现位置,将结果保存到 p 变量中。
  4. 进入一个循环,当 p 不等于 -1 时执行以下操作: a. 初始化 cnt 为 0。 b. 在内层循环中,判断 s[p + cnt] 是否为字符 '6',若是则增加 cnt 的值。 c. 根据 cnt 的大小进行不同的替换操作:
    • 如果 cnt 大于 3 且小于等于 9,则使用 replace() 函数将字符 '6' 替换为字符 '9',并将 p 的值增加 1。
    • 如果 cnt 大于 9,则使用 replace() 函数将 cnt 个字符 '6' 替换为字符串 "27",同时增加 cnt 的值 2。 d. 更新 p 的值,使用 find() 函数在字符串 s 中查找字符 '6' 的出现位置。
  5. 循环结束后,输出修改后的字符串 s。
  6. 返回 0,表示程序正常结束。

四、程序源代码

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int p = 0, cnt = 0;
    string s;
    getline(cin, s);
    p = s.find('6', p);
    while (p != -1) {
        cnt = 0;
        while (s[p + cnt] == '6') cnt++;
        if (cnt > 3 && cnt <= 9) s.replace(p, cnt, "9"), p++;
        else if (cnt > 9) s.replace(p, cnt, "27"), cnt += 2;
        else p += cnt;
        p = s.find('6', p);
    }
    cout << s << endl;
    return 0;
}

五、题目评分

 L1-059 敲笨钟

一、题目编号及题目说明

二、程序功能测试及说明

  读取输入的数据,并根据一定的规则进行处理和输出。

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

  1. 声明整数变量 n,使用 cin 操作符从标准输入读取一个整数。
  2. 使用 cin.ignore() 跳过换行符。
  3. 声明整数变量 i,并初始化为 0,用作循环计数器。
  4. 进入一个循环,循环次数为 n: a. 声明字符串变量 p,使用 getline() 函数从标准输入读取一行字符串。 b. 声明整数变量 j、k 和 flag,分别用作循环索引和计数以及标记。 c. 进入一个内层循环,循环条件是 j 小于字符串 p 的长度:
    • 判断当前字符是否为逗号 ',',若是,则判断前三个字符是否为 "gno",如果是,则将 flag 值增加 1。
    • 判断当前字符是否为句点 '.',若是,则判断前三个字符是否为 "gno",如果是,则将 flag 值增加 1。 d. 判断 flag 的值是否等于 2,如果是:
    • 声明整数变量 count 并初始化为 0,用于记录空格出现的次数。
    • 从字符串 p 的末尾开始向前遍历,当遇到空格时,将 count 增加 1。
    • 当 count 的值等于 3 时,将 count 更新为 p 的长度减去当前位置,然后跳出循环。
    • 使用循环遍历输出 p 字符串中去掉最后 count 个字符的部分。
    • 输出字符串 " qiao ben zhong.\n"。 e. 如果 flag 的值不等于 2,则输出字符串 "Skipped\n"。
  5. 循环结束后,程序正常结束。

四、程序源代码

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int n;
    cin>>n;
    cin.ignore();
    int i=0;
    for(i=0;i<n;i++)
    {
        string p;
        int j=0,k=0,flag=0;
        getline(cin,p);
        
        //cout<<p<<endl;
        for(j=0;j<p.length();j++)
        {
            if(p[j]==',')
            {
                //printf("%c%c%c\n",p[j],p[j-1],p[j-2]);
                if(p[j-1]=='g'&&p[j-2]=='n'&&p[j-3]=='o')
                {
                    flag+=1;
                }
            }
            
                if(p[j]=='.')
            {
                //printf("%c%c%c\n",p[j],p[j-1],p[j-2]);
                if(p[j-1]=='g'&&p[j-2]=='n'&&p[j-3]=='o')
                {
                    flag+=1;
                }
            }
            
        }
        if(flag==2)
            {
            int count=0;
            for(k=p.length();k>0;k--)
            {
                if(p[k]==' ')
                {
                    count++;
                }
                if(count==3)
                {
                    count=p.length()-k;
                    break;
                }
            }
            for(k=0;k<(p.length()-count);k++)
                    {
                        printf("%c",p[k]);
                    }
            printf(" qiao ben zhong.\n");
            }
        if(flag!=2)
        {
            printf("Skipped\n");
        }
        }
        }
        

五、题目评分

 L1-060 心理阴影面积

一、题目编号及题目说明

二、程序功能测试及说明

从标准输入读取两个整数 a 和 b,计算并输出两个数之差的一半与100的积。

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

  1. 声明整数变量 a、b,使用 cin 操作符从标准输入读取两个整数。
  2. 声明整数变量 s。
  3. 使用算术运算符计算 a 和 b 的差,然后乘以 100,再除以 2,将结果赋值给变量 s。
  4. 使用 printf 函数输出变量 s 的值,并换行。
  5. 返回整数值 0,结束程序。

四、程序源代码

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int a,b;
    cin>>a>>b;
    int s;
    s=(a-b)*100/2;
    printf("%d\n",s);
    return 0;
}

五、题目评分

 L1-061 新胖子公式

一、题目编号及题目说明

二、程序功能测试及说明

  从标准输入读取两个浮点数 a 和 b,计算并根据一定的条件输出结果。

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

  1. 声明浮点数变量 a、b,使用 cin 操作符从标准输入读取两个浮点数。
  2. 声明浮点数变量 c。
  3. 使用算术运算符计算 a 除以 (b的平方),将结果赋值给变量 c。
  4. 使用条件语句判断变量 c 是否大于 25:
    • 如果 c 大于 25,则使用 printf 函数输出保留一位小数的 c 的值,并在后面添加字符串 "PANG\n"。
    • 否则,使用 printf 函数输出保留一位小数的 c 的值,并在后面添加字符串 "Hai Xing\n"。
  5. 返回整数值 0,结束程序。

四、程序源代码

#include<bits/stdc++.h>
using namespace std;
int main()
{
    float a,b;
    cin>>a>>b;
    float c;
    c=a/(b*b);
    if(c>25)
    {
        printf("%.1f\nPANG\n",c);
    }
    else{
        printf("%.1f\nHai Xing\n",c);
    }
    return 0;
}

五、题目评分

 L1-062 幸运彩票

一、题目编号及题目说明

二、程序功能测试及说明

   从标准输入读取一个整数 n,然后循环 n 次进行操作。

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

  1. 声明字符串变量 s,用于存储输入的字符串。
  2. 使用 cin 操作符从标准输入读取字符串 s。
  3. 声明两个整数变量 a 和 b,初始化为 0。
  4. 进入一个循环,循环条件是 i 小于字符串 s 的长度:
    • 当 i 小于 3 时,将字符转换为数字并加到变量 a 上。
    • 当 i 大于等于 3 时,将字符转换为数字并加到变量 b 上。
  5. 使用条件语句判断变量 a 是否等于变量 b:
    • 如果相等,输出字符串 "You are lucky!"。
    • 否则,输出字符串 "Wish you good luck."。
  6. 循环结束后,程序正常结束。

四、程序源代码

#include <bits/stdc++.h>
using namespace std;

int main() {
    string s;
    int n, a, b;
    cin >> n;
    while (n--) 
    {
        cin >> s;
        a = 0, b = 0;
        for (int i = 0; i < s.size(); i++)
        {
            if (i < 3) 
                a += s[i] - '0';
            else 
                b += s[i] - '0';
        }
        if (a == b) 
            cout << "You are lucky!" << endl;
        else 
            cout << "Wish you good luck." << endl;
    }
    return 0;
}

五、题目评分

 L1-063 吃鱼还是吃肉

一、题目编号及题目说明

二、程序功能测试及说明

   从标准输入读取一个整数 n,然后进行相关操作。

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

  1. 声明整数变量 n、s、t、a 分别表示循环次数、身高、体重和性别。
  2. 使用 scanf 函数从标准输入读取一个整数 n。
  3. 进入一个循环,循环条件是 n 大于 0:
    • 使用 scanf 函数从标准输入读取三个整数 a、s 和 t。
    • 使用条件语句判断变量 a 的值:
      • 如果 a 等于 1,即男孩:
        • 根据身高 s 的不同范围输出对应的字符串。
        • 根据体重 t 的不同范围输出对应的字符串。
      • 如果 a 等于 0,即女孩:
        • 根据身高 s 的不同范围输出对应的字符串。
        • 根据体重 t 的不同范围输出对应的字符串。
    • 每次循环结束后,n 减 1。
  4. 程序正常结束。

四、程序源代码

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int n,s,t,a;//用a表示男女,s表示身高,t表示体重,n表示循环次数
  scanf("%d",&n);
  while(n--)
  {
    scanf("%d %d %d",&a,&s,&t);
    if(a==1)//判断是不是男孩
    {
      if(s<130) printf("duo chi yu! ");
      if(s==130) printf("wan mei! ");
      if(s>130) printf("ni li hai! ");
      if(t<27) printf("duo chi rou!\n");
      if(t==27) printf("wan mei!\n");
      if(t>27) printf("shao chi rou!\n");
    }
    if(a==0)//判断是不是女孩
    {
      if(s<129) printf("duo chi yu! ");
      if(s==129) printf("wan mei! ");
      if(s>129) printf("ni li hai! ");
      if(t<25) printf("duo chi rou!\n");
      if(t==25) printf("wan mei!\n");
      if(t>25) printf("shao chi rou!\n");
    }
  }
  return 0;
}

五、题目评分

 总结:事实不是“努力就会有回报”,是“努力总会有回报”。

每日一mo:我稍微露出点破绽,你也不会知道我在想你......