牛客网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; }