当前位置: 首页 > article >正文

PTA部分题目C++重练

早上好啊,大佬们,最近不是开了算法的专栏嘛,但是还没有正式开始学习算法,还在接触学习C++的内容,但是大佬们也是知道的,如果不练习肯定是不能很好掌握的。

所以,小白兔可能在结束C++STL库内容之前会发几篇之前写的PTA的一些比较麻烦的题目,用C++重新写一遍。

 L1-056 猜数字

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

typedef struct{
    char s[10];
    int guess;
}peo;
int main()
{
    int N, ave=0, k=0, dis=10000;
    peo x[10005];
    cin >> N;
    for (int i=0; i<N; i++)
    {
        cin >> x[i].s >> x[i].guess;
        ave += x[i].guess;
    }
    ave /= N*2;
    for (int i=0; i<N; i++)
    {
        if (dis > abs(ave - x[i].guess))
        {
            dis = abs(ave - x[i].guess);
            k = i;
        }
    }
    cout << ave << ' ' << x[k].s << endl;
    
    return 0;
}

L1-058 6翻了

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

int main()
{
    int cnt=0, i;
    string s;
    getline(cin, s);
    for (i=0; i<s.length(); i++)
    {
        if (s[i] == '6')
        {
            for (;s[i] == '6'; i++)
                cnt ++;
            if (cnt > 9) printf("27");
            else if (cnt > 3) printf("9");
            else
                for (int j=0; j<cnt; j++)
                    printf("6");
        }
        cnt = 0;
        printf("%c", s[i]);
    }
    cout << "\n";
    return 0;
}

L1-093 猜帽子游戏

#include<iostream>
#include<cstdio>

using namespace std;

int main()
{
    int n,m;
    cin>>n;
    int a[101]={0};
    int s[101]={0};
for(int i=0;i<n;i++)
{
cin>>a[i];
}
cin>>m;
while(m--)
{
int num=n,num1=0;
for(int i=0;i<n;i++)
{
cin>>s[i];
}
for(int i=0,j=0;i<n,j<n;i++,j++)
{
if(s[i]!=a[j]&&s[i]!=0)
{
num--;
}
if(s[i]==0)
{
num1++;
}
}
if(num==n&&num1!=n)
{
}

L1-101 别再来这么多猫娘了!

#include<iostream>
#include<vector>
#include<string>

using namespace std;

const int N=110;

string str[N],s;

int main()
{
    int n;
    cin>>n;
    cin.ignore();//处理回车
    for(int i=0;i<n;i++) getline(cin,str[i]);
    
    int m;
    cin>>m;
    if(m==0) cout << 0 << endl << "He Xie Ni Quan Jia!";//如果m=0,那么无论如何都会违规,按要求进行输出
    else
    {
        cin.ignore();//处理回车
        int num=0;//记录违规的词的数量
        getline(cin,s);
        for(int i=0;i<n;i++)
        {
            while(s.find(str[i])!=s.npos)//这里使用string库中的find函数,如果找到违规词执行以下循环
            {
                int res=s.find(str[i]);//记录找到的违规词的位置
                num++;//数量加一
                s.erase(res,str[i].length());//使用string库中的erase函数删除这个违规词
                s.insert(res,"---");//因为后面还有判断所以不能直接替换先把出现违规词的地方用一个字符串代替,进行标记
            }
        }
        if(num>=m)
        //如果违规词的数量大于给出的阈值进行输出
        cout << num << endl << "He Xie Ni Quan Jia!";
        
        else//小于等于阈值的情况
        {
            while(s.find("---")!=-1)//如果找到了标记的地方进行循环
            {
                int t=s.find("---");//定义一个整型的t来存位置
                s.erase(t,3);//删除
                s.insert(t,"<censored>");//插入关键词
            }
            cout<<s<<endl;
        }
    }
}

L1-102 兰州牛肉面

#include<iostream>

using namespace std;

const int N=110;

double much[N];//按题目要求需要用double类型的数组去存
int num[N];//存总营业额

int main()
{
    int n;
    cin>>n;
    double sum=0;
    for(int i=1;i<=n;i++)
    cin>>much[i];
    
    int a,b;
    while(cin>>a>>b,a!=0)//0 0的时候停止
    {
        sum+=much[a]*b;
        num[a]+=b;
    }
    for(int i=1;i<=n;i++)
    {
        printf("%d\n",num[i]);
    }
    printf("%.2f",sum);//精确到分就是小数点后两位
}

L1-103 整数的持续性

#include<iostream>
#include<vector>

using namespace std;

int zhao(int num)//找持续性
{
    int res=0;//记录次数
    while(num>=10)//当num<10时停止查找
    {
        int s=1;//记录成绩
        while(num>0)//计算每一位相乘的积
        {
        s*=(num%10);
        num/=10;
    }
    num=s;//更新状态
    res++;
    }
    return res;
}

int main()
{
    int a,b;
    cin>>a>>b;
    int max=-1000;
    vector<int> llong;
    for(int i=a;i<=b;i++)
    {
        int res=zhao(i);
        if(res>max)//如果有更大的就将vecotr清空再将最大的值插入
        {
            max=res;
            llong.clear();
            llong.push_back(i);
        }
        else if(res==max)//如果和最大值一样则直接插入
        {
            llong.push_back(i);
        }
    }
    cout << max <<endl;
    for(int i=0;i<llong.size();i++)
    {
        if(i>0)
        cout<<" ";
        cout<<llong[i];
    }
}

总结

大家一定不要停下刷题的脚步哦,这东西也会有手生一说的,如果很久没写的话,也是会变差的。

OK,今天水一篇,我们下一篇见。Bye Bye~


http://www.kler.cn/a/394703.html

相关文章:

  • 策略模式、状态机详细解读
  • Linux网络——网络初识
  • React Hooks在现代前端开发中的应用
  • 鸿蒙HarmonyOS 地图不显示解决方案
  • C 语言 【模拟实现内存库函数】
  • C语言 | Leetcode C语言题解之第557题反转字符串中的单词III
  • 浅谈C#之单线程流式适配器
  • 前端(1)——快速入门HTML
  • UI自动化测试|元素操作浏览器操作实践
  • 【开源免费】基于SpringBoot+Vue.JS课程答疑系统(JAVA毕业设计)
  • 黑马产品经理
  • 青少年编程与数学 02-003 Go语言网络编程 21课题、Go语言WebSocket编程
  • C#入门 020 事件(类型成员)
  • 膜计算 MATLAB例程(仅例程,无背景)
  • Linux 中自旋锁与信号量的区别
  • 网络初阶——运输层:TCP 协议(Part2)
  • docker构建jdk11
  • 拆解测试显示Mac Mini (2024)固态硬盘并未锁定 互换硬盘后仍可使用
  • Spring Data Redis常见操作总结
  • 深度学习之pytorch常见的学习率绘制
  • 【模块一】kubernetes容器编排进阶实战之etcd的介绍与使用
  • 基于树莓派的日志抓取工具制作
  • ssh和nfs
  • Vue之插槽(slot)
  • 力扣 LeetCode 344. 反转字符串(Day4:字符串)
  • 力扣889:根据先序和后序遍历构造二叉树