复杂问题分析&思维训练

搬砖

题目描述

搬砖,使人劳累。

小可通过计算得知:搬一块砖,需要使用 i 力气,接着去搬第二块砖,需要使用2×i 力气,以此类推,接着去搬第 k 块砖,需要使用k×i 力气。

现在已知小可现在总共有n 的力气,如果连续搬w 块砖,小可相差了多少力气?

输入描述

第一行包含三个正整数k,n,w(1≤k,w≤1000,0≤n≤10​9​​),分别代表搬第一块砖的力气、小可现在有的力气数和要搬走的砖数。

输出描述

输出一个整数表示相差的力气值。如果现在完全可以搬w 块转,输出 0。

输入样例

3 17 4

输出样例

13

代码

#include<iostream>
#include<stack>
#include<string> 
#include<cstdio>
using namespace std;
int main(){
	int n,k,w ;
	cin>>k>>n>>w;
	cout<<((k+k*w)*w)/2-n;
	return 0;
} 

计算两个日期之间的天数

题目描述

给定两个日期,计算相差的天数。比如2010-1-1和2010-1-3相差2天。

输入描述

共两行

第一行包含三个整数startYear,startMonth,startDay,分别是起始年、月、日。 

第二行包含三个整数endYear,endMonth,endDay,分别是结束年、月、日。 相邻两个整数之间用单个空格隔开。 年份范围在1~3000。保证日期正确且结束日期不早于起始日期。

输出描述

输出一个整数,即是两个日期相差的天数。

样例

输入
2008 1 1
2009 1 1
输出
366

提示

闰年被定义为能被4整除的年份,但是能被100整除而不能被400整除的年是例外,它们不是闰年。闰年的2月份有29天。

代码

#include<iostream>
#include<stack>
#include<cstdio>
using namespace std;
int n;
int y1,y2,m1,m2,d1,d2;
int y[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
bool rn(int n){
	if(n%4==0&&n%100!=0||n%400==0){
		return 1;
	}
	else{
		return  0;
	}
}
int main(){
	cin>>y1>>m1>>d1>>y2>>m2>>d2;
	long long sum=0;
	
	for(int i=y1+1;i<=y2-1;i++){
		if(rn(i)){
			sum+=366;
		}
		else{
			sum+=365;
		}
	}
	if(rn(y1)){
		y[2]=29;
	} 
	else{
		y[2]=28;
	}
	if(y1==y2&&m1!=m2){
		for(int i=m1+1;i<=m2-1;i++){
			sum+=y[i];
		}
		sum+=y[m1]-d1;
		sum+=d2;
	}
	else if(y1!=y2){
		sum+=y[m1]-d1;
		for(int i=m1+1;i<=12;i++){
			sum+=y[i];
		}
		sum+=d2;
		for(int i=1;i<=m2-1;i++){
			sum+=y[i];
		}
	}
	else if(y1==y2&&m1==m2){
		sum+=d2-d1;
	}
	cout<<sum;
	return 0;
} 

具有前导0的回文数

题目描述

给定一个整数N。判断是否可以在整数N的开头添加零个或多个0,以得到回文数?(回文数是从前面读和从后面读都相同的数)

输入描述

输入一个正整数 n

输出描述

如果可以在前面加上0个或多个0构成回文数,则输出YES,否则输出NO

输入样例

1210

输出样例

YES

数据描述

0≤n≤10的9次方

代码

#include<iostream>
#include<stack>
#include<string> 
#include<cstdio>
using namespace std;
long long n;
long long hw(long long n){
	long long a=0;
	while(n){
		a=a*10+n%10;
		n/=10;
	}
	return a;
}
int main(){
	cin>>n;
	while(n%10==0){
		n/=10;
	}
	if(hw(n)==n){
		cout<<"YES";
	}
	else{
		cout<<"NO";
	}
	return 0;
} 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值