有需戳–>牛客网在线编程
NC65、题目描述
大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0,第1项是1)
n≤39
示例1:
输入:4
返回值:3
class Solution {
public:
int Fibonacci(int n) {
if(n==0||n==1)
{
return n;
}
else
{
return Fibonacci(n-1)+Fibonacci(n-2);
}
}
};
NC103、题目描述
写出一个程序,接受一个字符串,然后输出该字符串反转后的字符串。(字符串长度不超过1000)
示例1:
输入"abcd"
返回值"dcba"
解题分析:我主要是通过对str倒序循环,把要倒序的字符串倒着赋值给另一个
字符串result,最后返回result。
class Solution {
public:
string solve(string str) {
string result="";
for(int i=str.length()-1;i>=0;i--)
{
result+=str[i];
}
return result;
}
};
NC107、题目描述
山峰元素是指其值大于或等于左右相邻值的元素。给定一个输入数组nums,任意两个相邻元素值不相等,数组可能包含多个
山峰。找到索引最大的那个山峰元素并返回其索引。
假设 nums[-1] = nums[n] = -∞。
示例1:
输入:[2,4,1,2,7,8,4]
返回值:5
解题分析:题目是找索引值最大的峰值元素的索引,从后往前更好,找到直接返回即可,
但要注意处理首尾元素。
class Solution {
public:
int solve(int* a, int aLen) {
if(a[aLen-1]>a[aLen-2])
{
return aLen-1;
}
for(int i=aLen-2;i>0;i--)
{
if(a[i]>a[i-1] && a[i]>a[i+1])
{
return i;
}
}
if(a[0]>a[1])
{
return 0;
}
//给定数组没有峰值元素,返回-1
return -1;
}
};
NC141、题目描述
给定一个字符串,请编写一个函数判断该字符串是否回文。如果回文请返回true,否则返回false。
示例1:
输入:"absba"
返回值:true
示例2:
输入:"ranko"
返回值:false
示例3:
输入:"yamatomaya"
返回值:false
示例4:
输入:"a"
返回值:true
解题分析:判断字符串左右两边是否对称相等即可,但要注意长度奇或偶的处理。
class Solution {
public:
bool judge(string str) {
if(str.length()%2==1)//长度为奇数
{
for(int i=str.length()-1,j=0;i>str.length()/2,j<str.length()/2;j++,i--)
{
if(str[i]!=str[j])
{
return false;
}
}
return true;
}
else //长度为偶数
{
for(int i=str.length()-1,j=0;i>=str.length()/2,j<str.length()/2;j++,i--)
{
if(str[i]!=str[j])
{
return false;
}
}
return true;
}
}
};
NC151、题目描述
求出两个数的最大公约数,如果有一个自然数a能被自然数b整除,则称a为b的倍数,b为a的约数。几个自然数公有的约数,
叫做这几个自然数的公约数。公约数中最大的一个公约数,称为这几个自然数的最大公约数。
示例1
输入:3,6
返回值:3
示例2:
输入:8,12
返回值:4
备注:a和b的范围是[1-109]
class Solution {
public:
int gcd(int a, int b) {
int c;
c=(a>b)?b:a;//c等于小者
while(a%c!=0||b%c!=0)//只要有一个余数不为0,便c--
{
c--;
}
return c;
}
};
NC661、题目描述
这一天你跟你的n个朋友一起出去玩,在出门前妈妈给了你k块糖果,你决定把这些糖果的一部分分享给你的朋友们。由于你
非常热心,所以你希望你的每一个朋友分到的糖果数量都比你要多(严格意义的多,不能相等)。求你最多能吃到多少糖果?
示例1:
输入:2,10
返回值:2
说明:你可以分给你的两个朋友各4个糖果,这样你能吃到2个糖果,这样能保证你的每个朋友的糖果数都比你多,不存在你能
吃到3个或者以上糖果的情况
示例2:
输入:3,11
返回值:2
说明:你可以分给你的3个朋友各3个糖果,这样你能吃到2个糖果,这样能保证你的每个朋友的糖果数都比你多,不存在你能
吃到3个或者以上糖果的情况
备注:
对于百分之30的数据:1\leq n\leq 100,n\leq k\leq 1001≤n≤100,n≤k≤100
对于百分之100的数据:1\leq n\leq 1e18,n\leq k\leq 1e181≤n≤1e18,n≤k≤1e18
函数有两个long long型参数
第一个参数代表题目中的n
第二个参数代表题目中的k
解题分析:先假设拿k块糖果平均分给(n+1)个人,若余数为n,则把剩下的n块糖果分给n位朋友,不然牛牛只能分到前面均分
的糖果数目再少一块,才能保证牛牛分到的糖果比所有朋友都少。
class Solution {
public:
long long Maximumcandies(long long n, long long k) {
if (k % (n + 1) == n)
//给n+1个人平均分(k-n)块糖果,再把剩下的n块糖果给n个朋友,这样朋友就都比牛牛多了
return k / (n + 1);
//如果余数小于n,那么牛牛能分到的糖果得再少一块
return k / (n + 1) - 1;
}
};
NC681、题目描述
牛牛有两个数a和b,他想找到一个大于a且为b的倍数的最小整数,只不过他算数没学好,不知道该怎么做,现在他想请你帮忙
给定两个数a和b,返回大于a且为b的倍数的最小整数。
示例1
输入:3,2
返回值:4
说明:大于3且为2的倍数的最小整数为4。
备注:1≤a,b≤10^9
class Solution {
public:
int findNumber(int a, int b) {
int num=a/b;
return (num+1)*b;
}
};
NC713、题目描述
牛牛想把一个数n转化为八位的二进制数,只不过牛牛不知道该怎么做,所以他想请你帮忙。
给定一个数n,返回将这个数转化为八位的二进制数(不足八位,往前补0)。
示例1:
输入:1
返回值:"00000001"
备注:0≤n≤255
解题分析:先定义并初始化一个数组b[8],从b末尾开始,循环保存每次的n%2的值,同时n=n/2,直至n<=0.
然后把数组b中的每个元素使用to_string(b[k])方法转成string类型,循环加在result中,最终返回result.
class Solution {
public:
string tranBinary(int n) {
int b[8]={0,0,0,0,0,0,0,0};
for(int i=7;i>=0;i--)
{
if(n>0)
{
b[i]=n%2;
n=n/2;
}
}
string result="";
for(int k=0;k<8;k++)
{
result=result+to_string(b[k]);
}
return result;
}
};
NC715、题目描述
牛牛特别喜欢数字7,他想知道如果一个数字n乘以7是否是一个素数。
给定一个数字n,如果该数乘以7是一个素数,返回"YES",否则,返回"NO"。
示例1:
输入:1
返回值:"YES"
备注:1≤n≤10^8
解题分析:一个数如果只能整除本身和1,那便是素数。
class Solution {
public:
string solve(int n) {
for(int i=2;i<7*n;i++)
{
if((7*n)%i==0)
{
return "NO";
}
}
return "YES";
}
};