题解 CF476A 【Dreamoon and Stairs】

首先分析题:

上台阶一步可以 1 个或者 2 步。

所以要想到达顶端,当 n 为偶数时,最少用 (frac{n}{2})步(({2,2,2,···,2,2}));当 n 为奇数时,最少用(frac{n}{2}+1)步(({2,2,2,···,2,1}))。最多当然就是 n 步(({1,1,1,···,1,1}))。

接下来我们要做的,就是在这个范围内枚举,从小到大找出最小的能被 (m) 整除的那个步数 (x) 。找到就直接结束,找不到就输出-1

不愧是橙题

#include<bits/stdc++.h>
using namespace std;
int main() {
	int n,m,x,ccf=0;//勿喷变量名
	cin>>n>>m;
	if(n&1) ccf=1;//等同于n%2==1
	int mn=n/2+ccf,mx=n;
	for(int i=mn;i<=mx;i++) {
		if(i%m==0) {
			cout<<i<<endl;
			return 0;
		}
	}
	puts("-1");//找不到就输出-1
	return 0;
}
原文地址:https://www.cnblogs.com/ahawzlc/p/12671083.html