P2025 输出字符菱形
#include<bits/stdc++.h>
using namespace std;
long long t,a,b,i;
int main()
{
printf(
" *\n"
" ***\n"
"*****\n"
" ***\n"
" *\n");
return 0;
}
没有什么好说的,但其实在此之前不知道c++的printf可以多行打印字符串
P5704字母反转
n=m-'a'+'A';
n=m-32;
putchar(getchar()-'a'+'A');
putchar(toupper(getchar()));
P5705数字反转
已知有一位小数,所以很简单,可以用反转套路
#include<bits/stdc++.h>
using namespace std;
int main()
{
float m;
int a;
int b;
int c;
float d;
cin>>m;
a=m*10;
b=0;
for(int i=1; a>0; i++)
{
c=a%10;//个位
b=b*10+c;//新数字
a=a/10;//去掉个位
}
d=b;
d/=1000;
cout<<d;
return 0;
}
但好像输入输出可以更简单
#include <cstdio>
using namespace std;
char a, b, c, d;
int main(){
scanf("%c%c%c.%c", &a, &b, &c, &d);
printf("%c.%c%c%c", d, c, b, a);
return 0;
}
当然也可以用字符串
{
string a;
cin>>a;
int len=a.size();
for(int i=len-1;i>=0;i--)
cout<<a[i];
}
其他题目还会涉及前导0问题
{
int n,s;
cin>>n;
if(n<0)
{cout<<"-";n=-n;}
while(n)可以有效解决
{
s=s*10+n%10;
n/=10;}
cout<<s;
return 0;
关于前导0,高精度中也经常出现,通常这样解决
if(c[len-1]=0&&len>0)len--;
P5706再分肥宅水
是我很不喜欢的数据类型很重要,输出格式很重要的题目
printf("%.3f\n")//保留三位小数
printf("%5d",a)//指定输出数据占5列,输出数据在域内向右看齐(-5d就是向左对齐)
printf("%m.nf",a)//占m列,n表示保留n位小数
P5707 上学迟到
学校和 yyy 的家之间的距离为 ss 米,而 yyy 以 vv 米每分钟的速度匀速走向学校。
在上学的路上,yyy 还要额外花费 1010 分钟的时间进行垃圾分类。
学校要求必须在上午 \textrm{8:00}8:00 到达,请计算在不迟到的前提下,yyy 最晚能什么时候出门。
由于路途遥远,yyy 可能不得不提前一点出发,但是提前的时间不会超过一天。
#include<bits/stdc++.h>
using namespace std;
int main()
{
int s,v,q;
int m,ss;
float t;
cin>>s>>v;
t=s/v+10;///这里很神奇的向上取不取整都对,我觉得不用
if(s%v==0){q=t;}
else q=t+1;
if(q>480)
{ m=23-(q/60-8);//毕竟没有24打头的时间,而后面被减数是最小为0
ss=60-q%60;
if(ss==60)
{ss=0;///秒钟于分钟关系
m++;
}
}
else
{m=7-q/60;
ss=60-q%60;
if(ss==60)
{ss=0;
m++;
}
}
if(m<10&&ss>=10)
cout<<'0'<<m<<':'<<ss;
else if(m>=10&&ss>=10)
cout<<m<<':'<<ss;
else if(m<10&&ss<10)
cout<<'0'<<m<<':'<<'0'<<ss;
else if(m>=10&&ss<10)
cout<<m<<':'<<'0'<<ss;
return 0;
///记得补0
}