第一题
题目描述:
链接:https://ac.nowcoder.com/acm/problem/50906
来源:牛客网
求 a 的 b 次方对 p 取模的值,其中 0≤a,b,p≤1090≤a,b,p≤109
输入描述:
三个用空格隔开的整数a,b和p。
输出描述:
一个整数,表示ab mod p的值。
示例1:
输入
2 3 9
输出
8
我的代码:
/*
created by AchesonD16
*/
#include<iostream>
#include<math.h>
using namespace std;
int main()
{
int a,b,p,d,s;
cin >> a >> b >> p;
d = pow(a,b);
if (p != 0)
{
s = (int) (d % p);
cout << s << endl;
}
else{
return 0;
}
return 0;
}
结果与总结:
只有百分之六十的通过率!
次方公式: pow(a,b) a 的 b次方 要在最前面加入 头文件 #include<math.h>
第二题
题目描述:
牛牛现在有一个n个数组成的数列,牛牛现在想取一个连续的子序列,并且这个子序列还必须得满足:最多只改变一个数,就可以使得这个连续的子序列是一个严格上升的子序列,牛牛想知道这个连续子序列最长的长度是多少。
链接:https://ac.nowcoder.com/acm/problem/13134
来源:牛客网
输入描述:
输入包括两行,第一行包括一个整数n(1 ≤ n ≤ 10^5),即数列的长度; 第二行n个整数a_i, 表示数列中的每个数(1 ≤ a_i ≤ 10^9),以空格分割。
输出描述:
输出一个整数,表示最长的长度。
示例1
输入
6 7 2 3 1 5 6
输出
5
我的代码:
//
// Created by AchesonD16 on 2021/4/4.
//
#include<iostream>
using namespace std;
const int N = 1e5+10; //十的五次方加十
int n,arr[N],s[N],r[N],j;
int main()
{
n = 0;
cin >> n;
for(int i = 1; i <= n; i++)
{
cin >> arr[i];
}
/*
for (int i = 0; i < n; i ++) {
cout << arr[i];
}
对数组有没有输入进行遍历输出检查
*/
//这个for循环是求如果顺利的话 顺着升序列的长度 (第i个数结尾的连续上升子序列长度
for(int i = 1; i <= n; i++)
{
if(arr[i] > arr[i-1])
{
s[i] = s[i-1]+1;
}
else
s[i] = 1;
}
//第i个数开始的连续上升子序列长度
for(int i = n; i > 0; i--)
{
if(arr[i] < arr[i+1])
r[i] = r[i+1] + 1;
else
r[i] = 1;
}
for(int i = 1; i <= n; i++)
{
if(arr[i+1] > arr[i-1])
{
j = max(j, s[i-1] + r[i+1] + 1);
}
}
cout << j;
return 0;
}
结果与总结:
💯