题目链接:A-运算符号_牛客练习赛109 (nowcoder.com)
题目描述
小松鼠来到了学校,开始学习运算符号!
小松鼠对减法和取模很感兴趣,他想问一些问题。
t 次询问,每次给出 n,有如下两个操作可供选择:
选择一个整数 x,满足 x>0,将 n 变成 n−x,即
选择一个整数 x,满足 x>1,将 n 变成 n mod x,即
定义一次操作的代价为选择的 x 的大小。
问使 n 变为 0 的最小操作代价。
由于比赛中的一些题读入量较大,请使用较快的读入输出方式,这里提供快速读入输出模板:
#include<bits/stdc++.h>
using namespace std;
inline int read(){
int x=0,f=1;
char c=getchar();
while(c<'0'||c>'9'){
if(c=='-')f=-1;
c=getchar();
}
while(c<='9'&&c>='0'){
x=(x<<1)+(x<<3)+(c^48);
c=getchar();
}
return x*f;
}
void print(int x){
if(x<0)putchar('-'),x=-x;
if(x>9)print(x/10);
putchar(x%10^48);
}
int a,b;
int main(){
a=read(),b=read();
print(a+b);
return 0;
}
输入描述:
第一行输入一个数 t (),表示询问次数。
之后 t 行每行一个数 n (),表示每次需要变为 0 的数。
输出描述:
一共 t 行,每行一个数表示最小操作代价。
示例1
输入
1
3
输出
3
说明
使用一次操作 2,选择 x=3 即可,最小代价为 3。
思路
这题本身并不难,但很容易出小问题,题干给出了一个提示--快速读入输出,由于该题的数字较大,普通读入输出会导致超时,所以我们直接引用提示的函数代码即可。
引用了提示的函数代码,就可以用read()函数和print()函数,可以快速读入和输出。
还需注意每输出一个就要换行,所以在循环中加上一个换行语句。
本题要问最小的操作代价,当n为0时,不用操作,代价为0;为1时操作-1即可,代价为1;当n可以被2整除时(n%2==0),代价为模的2;其余代价都为3。
解题代码
#include <iostream>
using namespace std;
inline int read(){
int x=0,f=1;
char c=getchar();
while(c<'0'||c>'9'){
if(c=='-')f=-1;
c=getchar();
}
while(c<='9'&&c>='0'){
x=(x<<1)+(x<<3)+(c^48);
c=getchar();
}
return x*f;
}
void print(int x){
if(x<0)putchar('-'),x=-x;
if(x>9)print(x/10);
putchar(x%10^48);
}
int main(){
int t;
t=read();
long long n;
while(t--)
{
n=read();
if(n==0)
print(0);
else if(n==1)
print(1);
else if(n%2==0)
print(2);
else
print(3);
printf("\n");
}
return 0;
}