牛客网OJ题解--20210327

The Biggest Water Problem

https://ac.nowcoder.com/acm/problem/15173

本系列记录翀翀😐痛苦的刷题日志,所有题目均来自于牛客网OJ题目,坚持刷题谈起来容易做起来难,希望我可以坚持下去,这里仍然分享一段励志文案:每个人都有梦想,然而有些人把梦想变成了现实,有些人的梦想依旧是梦想,只因为他们为梦想付出的努力程度不一样,他们坚持的时间不一样,最终才有这样的结果。

NC15173-The Biggest Water Problem

题目链接

https://ac.nowcoder.com/acm/problem/15173

题目描述

给你一个数,让他进行巴啦啦能量,沙鲁沙鲁,小魔仙大变身,如果进行变身的数不满足条件的话,就继续让他变身。。。直到满足条件为止。

巴啦啦能量,沙鲁沙鲁,小魔仙大变身:对于一个数,把他所有位上的数字进行加和,得到新的数。 如果这个数字是个位数的话,那么他就满足条件。给一个整数数字n(1<=n<=1e9)。输出由n经过操作满足条件的数

测试样例

样例1

输入

12

输出

3

说明

12 -> 1 + 2 = 3

样例2

输入

38

输出

2

说明

38 -> 3 + 8 = 11 -> 1 + 1 = 2

解题思路

递归就好了,模10取最后一位。

解题代码

import java.util.Scanner;

public class Main {
    public static int transform(int x){
        int tmp=x;
        int num=0;
        while(tmp!=0){
            num+=tmp%10;
            tmp/=10;
        }
        if(num==x%10){
            return num;
        }
        else{
            return transform(num);
        }
    }
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n=sc.nextInt();
        int ans=transform(n);
        System.out.println(ans);
    }
}

NC14609-Forever97与寄信

题目链接

https://ac.nowcoder.com/acm/problem/14609

题目描述

Forever97与未央是一对笔友,他们经常互相写信。有一天Forever97去邮局寄信,发现邮局的收费方式变成了按字收费,收取的费用为总字数除了其自身以外的最大因子。虽然Forever97是一个有情调的人,但他不想因新收费方式而破财,所以他打算把信分成几份寄出去来减少邮费。已知Forever97写的信共有n个字,可以拆成无数封信,也可以不拆,每封信最少为2个字。求Forever97最少需要付多少邮费?

第一行一个正整数T(T<=200),表示共有T组数据。第2至第T+1行每行一个正整数n(2<=n<=108)。对每组数据输出一行,即Forever97最少需要付的邮费。

测试样例

输入

3
5
6
9

输出

1
2
2

说明

对于第二组数据,一封6字信可以拆分成两封3字信,各付1邮资。
对于第三组数据,一封9字信可以拆分成一封2字信和一封7字信,各付1邮资。

解题思路

思维题,直接爆搜会炸掉。其实只会有三种情况,即1块钱,2块钱和3块钱。最后一个不太好想,见下面的注释。

解题代码

#include <bits/stdc++.h>
using namespace std;

int solve(int N)
{
    int n = sqrt(N);
    int flag = 1;
    for (int i = 2; i <= n; i++)
    {
        if (N % i == 0)
        {
            flag = 0;
            break;
        }
    }
    //如果字数就是质数
    if (flag)
        //一块钱就行
        return 1;
    flag = 1;
    //如果是合数且是9,49这种减去一个2后就变成了质数,那么就两块钱
    for (int i = 2; i <= n; i++)
    {
        if ((N - 2) % i == 0)
        {
            flag = 0;
            break;
        }
    }
    if (flag || N % 2 == 0)
        return 2;
    //否则像51这种合数,需要减去2个2才能变成质数,就需要三块钱,没有其他情况了
    return 3;
}

int main()
{
    int t;
    cin >> t;
    while (t--)
    {
        int n;
        cin >> n;
        cout << solve(n) << endl;
    }
    return 0;
}
全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务