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~