以下都只是个人看法,并不是正确答案,有些代码,答案有错误,主要分享下题目,记录下。
1.问题描述
不超过19000的正整数中,与19000互质的数的个数是多少?
答案提交
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。
思路:直接遍历循环下,如果19000与其最大公约数是1,那么就是互质
个人答案:
7200
2.问题描述
在计算机存储中,15.125GB是多少MB?
答案提交
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。
没什么好说的
15488
3.问题描述
将LANQIAO中的字母重新排列,可以得到不同的单词,如LANQIAO、AAILNOQ等,注意这7个字母都要被用上,单词不一定有具体的英文意义。
请问,总共能排列如多少个不同的单词。
答案提交
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。
思路:有重复问题的全排列,很经典的问题,我用的递归写的
个人答案:
2520
4.问题描述
一个包含有2019个结点的无向连通图,最少包含多少条边?
答案提交
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分
简单的数据结构知识
2018
5.问题描述
在数列 a_1, a_2, …, a_n中,如果 a_i 和 a_j 满足 i < j 且 a_i > a_j,则称为一个逆序数对。
给定一个数列,请问数列中总共有多少个逆序数对。
输入格式
输入的第一行包含一个整数 n。
第二行包含 n 个整数 a_1, a_2, …, a_n,相邻的整数间用空格分隔,表示给定的数列。
输出格式
输出一行包含一个整数,表示答案。
样例输入
6
3 1 5 2 3 5
样例输出
4
评测用例规模与约定
对于 50% 的评测用例,1 <= n <= 100,0 <= 数列中的数 <= 1000。
对于所有评测用例,1 <= n <= 1000,0 <= 数列中的数 <= 10000。
思路:因为数据规模不大,就直接用的暴力,直接双重循环
代码:
#include<bits/stdc++.h>
using namespace std;
int a[1010];
int main()
{
int n;
long long ans=0;
cin>>n;
for(int i=0;i<n;i++)
cin>>a[i];
for(int i=0;i<n;i++)
{
for(int j=i+1;j<n;j++)
{
if(a[i]>a[j])
ans++;
}
}
cout<<ans<<endl;
return 0;
}
6.问题描述
输入一个单词,请输出这个单词中第一个出现的元音字母。
元音字母包括 a, e, i, o, u,共五个。
输入格式
输入一行,包含一个单词,单词中只包含小写英文字母。
输出格式
输出一行包含一个字母,为单词中第一个出现的元素字母。若单词中不存在元音字母,输出字母n。
样例输入
hello
样例输出
e
样例输入
fly
样例输出
n
评测用例规模与约定
对于所有评测用例,单词中的字母个数不超过100。
思路:直接用了标记数组,先把五个元音字母标记为true,然后遍历字符串,如果当前字母是被标记为true的,那么就输出
代码:
#include<bits/stdc++.h>
using namespace std;
char s[]="aeiou";
bool f[128];
int main()
{
string t;
cin>>t;
for(int i=0;i<5;i++)
f[s[i]]=true;
for(int i=0;i<t.size();i++)
{
if(f[t[i]])
{
cout<<t[i];
return 0;
}
}
cout<<"n";
return 0;
}
7.问题描述
给定一个单词,请使用凯撒密码将这个单词加密。
凯撒密码是一种替换加密的技术,单词中的所有字母都在字母表上向后偏移3位后被替换成密文。即a变为d,b变为e,…,w变为z,x变为a,y变为b,z变为c。
例如,lanqiao会变成odqtldr。
输入格式
输入一行,包含一个单词,单词中只包含小写英文字母。
输出格式
输出一行,表示加密后的密文。
样例输入
lanqiao
样例输出
odqtldr
评测用例规模与约定
对于所有评测用例,单词中的字母个数不超过100。
比较简单,注意下要取余
代码:
#include<bits/stdc++.h>
using namespace std;
int main()
{
string s;
cin>>s;
for(int i=0;i<s.size();i++)
{
s[i]='a'+(s[i]-'a'+3)%26;
}
cout<<s<<endl;
return 0;
}
8.问题描述
对于一个 n 行 m 列的表格,我们可以使用螺旋的方式给表格依次填上正整数,我们称填好的表格为一个螺旋矩阵。
例如,一个 4 行 5 列的螺旋矩阵如下:
1 2 3 4 5
14 15 16 17 6
13 20 19 18 7
12 11 10 9 8
输入格式
输入的第一行包含两个整数 n, m,分别表示螺旋矩阵的行数和列数。
第二行包含两个整数 r, c,表示要求的行号和列号。
输出格式
输出一个整数,表示螺旋矩阵中第 r 行第 c 列的元素的值。
样例输入
4 5
2 2
样例输出
15
评测用例规模与约定
对于 30% 的评测用例,2 <= n, m <= 20。
对于 70% 的评测用例,2 <= n, m <= 100。
对于所有评测用例,2 <= n, m <= 1000,1 <= r <= n,1 <= c <= m。
代码:
#include<bits/stdc++.h>
using namespace std;
int s[1010][1010];
int main()
{
int n,m,x,y;
cin>>n>>m>>x>>y;
int a=m,b=n-1,c=m-1,d=n-2,t=1;
int k=1,p=1,k2=n,k3=m;
while(t<=n*m)
{
for(int i=1;i<=a;i++)
{
s[k][p++]=t++;
}
if(t>=n*m)
break;
k++, p--;
for(int j=1;j<=b;j++)
s[k++][p]=t++;
if(t>=n*m)
break;
p--,k--;
for(int i=1;i<=c;i++)
s[k][p--]=t++;
if(t>=n*m)
break;
k--,p++;
for(int j=1;j<=d;j++)
s[k--][p]=t++;
if(t>=n*m)
break;
p++,k++;
a-=2,b-=2;
c-=2,d-=2;
}
cout<<s[x][y];
return 0;
}
9.问题描述
给定一个序列 a_1, a_2, …, a_n。其中 a_1 是最大的数,没有其他数与 a_1 相等。
对于从第二个数开始的每个数 a_i,请找到位置在 a_i 之前且比 a_i 大的,位置上距离 a_i 最近的数 a_j。称 i-j 为 a_i 的前向距离。
对于给定的序列,请求出所有数的前向距离之和。
输入格式
输入的第一行包含一个整数 n,表示序列的长度。
第二行包含 n 个正整数,为给定的序列。
输出格式
输出一个整数,表示序列中所有数的前向距离之和。
样例输入
8
9 1 3 5 2 7 6 3
样例输出
14
样例说明
序列中从第二项开始的前向距离依次为:
1, 2, 3, 1, 5, 1, 1
和为14。
数据规模和约定
对于70%的评测用例,1 <= n <= 1000;
对于所有评测用例,1 <= n <= 100000,a_1 <= 1000000。
请注意答案可能很大,可能需要使用 long long 来保存。
还给了提示,非常的善良
b[i]表示在第i个数之前的且比a[i]大的,距离当前数最近的编号
思路:直接暴力找会超时,数据范围比较大,所以我们要跳着找,每次和前面的数(t)比较,如果小于当前数,那就和b[t]比较,一直找到为止
代码:
#include<bits/stdc++.h>
using namespace std;
int a[100100],b[100100];
long long ans=1;
int main()
{
int n;
cin>>n;
for(int i=0;i<n;i++)
cin>>a[i];
b[1]=1;
for(int i=2;i<n;i++)
{
for(int j=i-1;j>=0;j--)
{
if(a[j]>a[i])
{
b[i]=j;
break;
}
else
j=b[j];
}
ans+=i-b[i];
}
cout<<ans<<endl;
return 0;
}
10、问题描述
给出三个水杯,大小不一,并且只有最大的水杯的水是装满的,其余两个为空杯子。
三个水杯都没有标刻度线,在水杯之间可以相互倒水。当从一个杯子向另一个杯子倒水时,只能将一个杯子的水倒空或者将另一个杯子的水倒满。不允许倒到三个杯子以外的地方。
给定一个目标状态,请写出一个程序,使其输出使初始状态到达目标状态的最少次数。
输入格式
输入的第一行包含一个整数 n,表示总共有 n 组测试数据。
接下来每组测试数据包含两行,第一行包含三个整数 V_1,V_2,V_3,分别表示三个水杯的体积。
每组数据的第二行包含三个整数E_1,E_2,E_3(体积小于等于相应水杯体积)表示最终状态。
输出格式
输出 n 行,每行对应一组数据的结果。
如果可以达到最终状态,输出最少的倒水次数,如果不能达到目标准备,输出-1。
样例输入
2
6 3 1
4 1 1
9 3 2
7 1 1
样例输出
3
-1
评测用例规模与约定
对于所有评测用例,0<n<=50,0<V_3<V_2<V_1<=100,0<=E_1<=V_1,0<=E_2<=V_2,0<=E_3<=V_3,E_1+E_2+E_3=V_1。
不会写,如果你会的话帮帮我,嘻嘻