链接:https://ac.nowcoder.com/acm/contest/51721/A?&headNav=acm
来源:牛客网

#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;
}
在这道题中,我get到了一个快速读入输出模板 ,遇到了一个以前没有特别在意的知识点 取模运算 ,现在正好补上了。
取模运算
提到取模运算,就不得不说取余运算。这两个东西,既有重叠的部分,又有所不同。这个点呢,百度说的很详细。取模运算_百度百科 (baidu.com)
想要求这两个东西呢,首先有两个公式
求整数商:c=a/b;
求模(余数):r=a-c*b;
举个栗子:
计算:-7mod4
因此a=-7, b=4
第一步:求整数商c
求模运算:c=a / b=(-7) / 4 =-2 [向负无穷方向舍入]
求余计算:c=a / b=(-7) / 4 =-1 [向0方向舍入]
第二步:求计算模和余数的公式相同,a,b的正负号不同,c的值也不同
求模运算:r=a - c * b=-7 - (-2)*4=1
求余计算:r=a - c * b=-7 - (-1)*4=-3
计算:7mod4
因此a=7, b=4
第一步:求整数商c
求模运算:c=a / b=7 / 4 =1
求余计算:c=a / b=7 / 4 =1
第二步:求计算模和余数的公式相同,a,b的正负号,c的值也相同
求模运算:r=a - c * b=7 - 1*4=3
求余计算:r=a - c * b=7 - 1*4=3
由此可以归纳出,
当a和b正负一致时,求模运算和求余运算所得c的值相同,所以结果相同。
当a和b正负不一致时,结果不同。
回到题目,它给出了几个样例

由题目
会有t组数据,每组数据有一个数n,我们需要把这个数变成0.
有两种可以让n变成0的操作可以选择
第一种:n-x
第二种:n mod x (n与x取模)
而这个x,就是要我们求的最小的总代价。
分析一下,
如果说 n是一个偶数,想要让它变成0,只需要与2取余即可,因此偶数的话,x=2。但是如果是最小偶数0的话,它直接就是0,所以直接x=0就好。
若n为奇数,最快的操作就是,先选择第一种,x先取1,让n变成偶数,再让它与2取余,使它变成0。因此,若为奇数时,x应该等于1+2=3 。但是如果是最小奇数1的话,它只需要减1就好了。
*注:题中所给的均为正数,因此,在此题中,取余跟取模的结果一样。
代码如下(运用了快速读入输出模板)
#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;
}
代码如下
#include<stdio.h>
int main()
{
long t;
scanf("%ld",&t);
while(t--)
{
long long n,x;
scanf("%lld",&n);
if(n==0)
x=0;
else if(n==1)
x=1;
else if(n%2==0)
x=2;
else
x=3;
printf("%lld\n",x);
}
}