暨大上机oj链接点击即可跳转
1.(2019暨大oj)输入一个正整数 N,输出 N 的阶乘。
输入格式
每组数据占一行,包含一个整数 N。
输出格式
每组数据输出占一行,输出 N 的阶乘。
数据范围
1≤N≤10,
输入样例:
4
输出样例:
24
输入样例:
2
输出样例:
2
#include<iostream>
using namespace std;
int main()
{
int n;
cin >> n;
int sum = 1;
for (int i = n; i >=1; i--)
sum *= i;
cout << sum << endl;
return 0;
}
2.(2019暨大oj)给出一个字符串,判断它是不是回文(顺读,逆读均相同)的。
输入格式
数据占一行,包含一个有小写字母构成的字符串。
输出格式
输出一个结果,如果是回文字符串则输出 Yes!,否则输出 No!。
数据范围
字符串长度 ≤ 1000
输入样例:
hellolleh
输出样例
Yes!
输入样例:
helloworld
输出样例
No!
#include<iostream>
#include<string>
using namespace std;
int main()
{
string a;
cin >> a;
int len = a.length();
if (len == 1)
{
cout << "Yes!";
}
for (int i = 0; i < len / 2; i++)
{
if (a[i] != a[len - i - 1])
{
cout << "No!";
break;
}
if (i == len / 2-1)
cout << "Yes!";
}
return 0;
}
3.(2019暨大oj)给定长度为n的正整数序列a1,a2,…,an。 求一个递增的子序列,和最大。
输入
第一行,n,表示给定序列的个数。 第二行,n个用空格隔开的正整数。
输出
递增子序列的最大和。
数据范围限制
n ≤ 1000, 0 ≤ ai ≤ 100000。
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
int n;
int a[10000];
cin >> n;
for (int i = 0; i < n; i++)
cin >> a[i];
if (n == 1)
cout << a[0];
else
{
int max = 0;
for (int i = 0; i < n; i++)
{
int sum = a[i];
int k = i;
for (int j = i + 1; j < n; j++)
{
if (a[j] > a[k])
{
sum += a[j];
k = j;
}
}
if (sum > max)
max=sum;
}
cout << max << endl;
}
return 0;
}
4.(2018暨大oj)输入一个整数 n ,求斐波那契数列的第 n 项。
假定从 0 开始,第 0 项为 0。
数据范围
0≤n≤39
样例
输入:5
输出:5
#include<iostream>
using namespace std;
int Fib(int n)
{
if (n == 0)
return 0;
else if (n == 1)
return 1;
else
return Fib(n - 1) + Fib(n - 2);
}
int main()
{
int n;
cin >> n;
cout << Fib(n);
return 0;
}
5.(2018暨大oj)蛇形矩阵,是由 1 开始的自然数一次排列成的 N*N 的正方形矩阵,请输入一个 n,要求输 出宽度为 n 的蛇形矩阵 ,例如:
输入
3
输出
1 2 3
6 5 4
7 8 9
输入
6
输出
1 2 3 4 5 6
12 11 10 9 8 7
13 14 15 16 17 18
24 23 22 21 20 19
25 26 27 28 29 30
36 35 34 33 32 31
数据范围
n:[1, 15]
#include<iostream>
using namespace std;
int main()
{
int n, k = 1;
cin >> n;
int arr[100][100];
for (int i = 0; i < n; i++)
{
if (i % 2 == 0)
{
for (int j = 0; j < n; j++)
{
arr[i][j] = k++;
cout << arr[i][j] << " ";
}
cout << endl;
}
if (i % 2 == 1)
{
k = n + k;
for (int j = n; j > 0; j--)
{
arr[i][j] = --k;
cout << arr[i][j] << " ";
}
k = n + k;
cout << endl;
}
}
return 0;
}
6.(2019暨大oj)有一行格子,现在有三种颜料:红,黄,蓝。要每一个格子里面涂一种颜色,相邻格子颜色不能相同,而且首尾格子颜色也不能相同。问有多少种涂法?**
输入格式
一个整数 n,表示格子数量。
输出格式
一个整数 n,表示符合要求的涂法。
数据范围
1 ≤ n ≤ 30
输入样例
1
输出样例
0
输入样例
2
输出样例
6
输入样例
3
输出样例
6
//此题目找规律题
#include<iostream>
#include<math.h>
#include <iomanip>
using namespace std;
int main()
{
int n;
cout << setprecision(77); //不使用科学计数法
cin >> n;
if (n == 1)
cout << '0' << endl;
else if (n % 2 == 0)
cout << pow(2, n) + 2 << endl;
else
cout << pow(2, n) - 2 << endl;
return 0;
}
7.(2018暨大oj)任何个偶数总能表示为两个素数之和
输入格式
输入一个偶数 A。
输出格式
输出若干行,每行有两个素数 a b,用空格分开。 且 a+b=A, a ≤ b。
数据范围
A: [4, 1000]
样例输入:
10
样例输出:
3 7
5 5
#include<iostream>
using namespace std;
bool sushu(int n)
{
if (n == 2)
return true;
for (int i = 2; i < n ; i++)
{
if (n % i == 0)
return false;
}
return true;
}
int main()
{
int n;
cin >> n;
for (int i = 2; i <= n/2; i++)
{
for (int j = 2; j <= n; j++)
{
if (sushu(i) && sushu(j) && i + j == n)
cout << i<<" " << j << endl;
}
}
return 0;
}
8.(2018暨大oj)输入 n 个整数,求出该数组中最大连续子序列的和,并输出该子序列的首尾位置。序列位置从1开始计数。
输入格式说明
第一行:一个整数 n,代表序列中数字个数。 第二行:n 个整数。
输出格式说明
3个整数,分别是最大子序列和,子序列首位置,子序列尾位置。
输入样例
8
1 -3 7 8 -4 12 -10 6
输出样例
23 3 6
数据范围
n:[1, 1000],序列中的元素:[-1000, 1000]。
#include<iostream>
using namespace std;
int main()
{
int n,arr[1001];
cin >> n;
for (int i = 1; i <= n; i++)
cin >> arr[i];
int begin, end;
int max = -10000;
for (int i = 1; i <= n; i++)
{
int sum = arr[i];
for (int j = i + 1; j <= n; j++)
{
sum += arr[j];
if (sum > max)
{
max = sum;
begin = i;
end = j;
}
}
}
cout << max << " " << begin << " " << end << endl;
return 0;
}