洛谷入门 顺序结构重难点

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
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值