竞赛链接:Dashboard - Codeforces Round 958 (Div. 2) - Codeforces
ProblemA
题目链接:Problem - A - Codeforces
简单题解加代码:
Python:
def II():
return int(input())
def MII():
return map(int, input().split())
'''
模拟方法
'''
def func_1(n: int, k: int) -> int:
res = 0
cur = 1
while cur < n:
res += 1
cur += k - 1
return res
'''
数学方法
'''
def func_2(n: int, k: int) -> int:
return (n - 1 + k - 2) // (k - 1)
def main():
t = II()
res = []
'''
操作:是说给一个整数n,可以把n分成最多k项,每项相加的值为n,
此时操作次数加一
分成的k项每项也可以进行相同的操作,
结果:把n分成n个1
要求:求达到结果的最小操作次数
'''
for _ in range(t):
n, k = MII()
res.append(func_2(n, k))
for r in res:
print(r)
if __name__ == "__main__":
main()
C++:
#include <iostream>
#include <vector>
using namespace std;
//模拟方法
int func_1(int n, int k){
int res = 0;
int cur = 1;
while (cur < n){
res++;
cur += k - 1;
}
return res;
}
//数学方法
int func_2(int n, int k){
return (n - 1 + k - 2) / (k - 1);
}
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
int t;
cin >> t;
/*
操作:是说给一个整数n,可以把n分成最多k项,每项相加的值为n,
此时操作次数加一
分成的k项每项也可以进行相同的操作,
结果:把n分成n个1
要求:求达到结果的最小操作