牛客练习赛109--运算符号

题目链接:A-运算符号_牛客练习赛109 (nowcoder.com)


题目描述

小松鼠来到了学校,开始学习运算符号!

小松鼠对减法和取模很感兴趣,他想问一些问题。

t 次询问,每次给出 n,有如下两个操作可供选择:

  1. 选择一个整数 x,满足 x>0,将 n 变成 n−x,即

  1. 选择一个整数 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;
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值