本文结合PTA专项练习带领读者掌握数组,刷题为主注释为辅,在代码中理解思路,其它不做过多叙述。
已知N个人的成绩排名,按排名从小到大输出这N个人的编号。
输入格式:
第一行输入一个正整数N(N<=100);
第二行输入N个互不相同的整数,每个整数均取值为1到N。
输出格式:
输出仅一行,包括N个整数,其中第i个整数表示排第i名的人的编号。
数字之间用一个空格隔开,最后一个数字之后没有空格。
输入样例:
5
2 3 1 5 4
输出样例:
3 1 2 5 4
#include
int main()
{
int n;scanf("%d",&n);
int a[n];
for(int i=0;i<n;i++)
{
scanf("%d",&a[i]);
}//输入23154
int count=0;
for(int i=1;i<=n;++i) //假设第一次循环i=1
{
for(int j=0;j<n;++j)
{
if(a[j]==i) //j=2时a[j]=1
{
if(count==n-1) //对最后一个数字进行处理
{
printf("%d",j+1);
}
else
printf("%d ",j+1); //输出编号3
count++;
break;
}
}
}
}
输入N个数,求出现次数超过总数一半的数。数据保证存在这个数。
输入格式:
第一行输入一个正整数N(N<1000);
第二行输入N个数,每个数的绝对值不超过1e9。
输出格式:
输出一个数,即出现次数超过总数一半的数。
输入样例:
5
2 3 2 2 4
输出样例:
2
#include
int main()
{
long long int n;scanf("%lld",&n);long long int a[n];
for(long long int i=0;i<n;i++)
{
scanf("%lld",&a[i]);
}
for(long long int i=0;i<n-1;i++)
{
for(long long int j=0;j<n-i-1;j++)
{
if(a[j]>a[j+1])
{
long long int t=a[j+1];
a[j+1]=a[j];
a[j]=t;
}
}
}
//进行最大数的判断
long long int count=1;
for(long long int i=0;i<n-1;i++)
{
if(a[i]==a[i+1])
count++;
else
count=1;
if(count>n/2)
{
printf("%lld",a[i]);
break;
}
}
}
输入一个非降序列和一个数,将这个数插入到非降序列中并保持序列非降。
输入格式:
第一行输入一个正整数N(N<100000);
第二行按顺序输入N个非降的整数,保证每个整数在int范围;
第三行输入一个待插入的整数(int范围)。
输出格式:
输出仅一行,包括N+1个整数,为插入给定的数后的非降序列,数字之间用一个空格隔开,最后一个数字之后没有空格。
输入样例:
5
3 5 7 10 15
8
输出样例:
3 5 7 8 10 15
//将一个数插入到非降序列中并保持序列非降
#include
int main()
{
int n;scanf("%d",&n);int a[n+1];
for(int i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
int x;
scanf("%d",&x);
for(int i=0;i<n;i++)
{
//x最小的情况
if(x<=a[0])
{//逆序往后移
for(int j=n-1;j>=0;j--)
{
a[j+1]=a[j];
}
//x赋值给a[0]
a[0]=x;
break;
}
//x在其中的情况
else if(x>=a[i]&&x<=a[i+1])
{
//逆序往后移
for(int j=n-1;j>=i+1;j--)
{
a[j+1]=a[j];
}
//把x赋值给a[i+1]
a[i+1]=x;
break;
}
//x最大的情况
else if(x>=a[n-1])
{
a[n]=x;
}
}
for(int i=0;i<=n;i++)
{
if(i==n)
printf("%d",a[i]);
else
printf("%d ",a[i]);
}
}
给定n个整数,请用冒泡排序法对这n个整数从小到大排序。
输入格式:
第一行输入一个正整数N(N<=1000);
第二行输入N个整数(int范围)。
输出格式:
输出仅一行,为排完序后的N个数,两个数之间用一个空格隔开。
输入样例:
5
3 5 4 3 5
输出样例:
3 3 4 5 5
#include
int main()
{
int n;scanf("%d",&n);int a[n];
for(int i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
for(int i=0;i<n-1;i++)
{
for(int j=0;j<n-i-1;j++)
{
if(a[j]>a[j+1])
{
int t=a[j+1];
a[j+1]=a[j];
a[j]=t;
}
}
}
for(int i=0;i<n;i++)
{
if(i==n-1)
printf("%d",a[i]);
else
printf("%d ",a[i]);
}
}
输入一个序列和一个数,将这个序列中与该个数相等的元素删除,保持其他元素先后顺序不变。
输入格式:
第一行输入n(2 第二行输入n个正整数(小于1e9); 第三行输入一个正整数k,为要删除的元素值。 输出仅一行,即进行删除后的序列,两个元素之间有一个空格作为分隔符,末尾无空格。 4 输出样例: 5 2 方法一:特殊值法 方法二:使用双指针来实现。一个指针用于遍历原数组,另一个指针用于记录删除指定元素后的新数组的位置。 青年歌手大奖赛中,评委会给参赛选手打分。选手得分规则为:去掉一个最高分和一个最低分,然后计算出平均分即为选手最终得分。 第一行输入一个正整数n(2 第二行输入n个整数,表示n个评委的打分。 输出仅一行,即选手的最终得分,结果保留2位小数。 4 输出样例: 98.50 已知N个人的成绩,编号从1到N,输出成绩排名前K个人的成绩。 第一行输入一个正整数N(N<=100); 第二行输入N个正整数(范围为1到100),即学生的成绩; 第三行输入一个正整数K(K>=1)。 输出仅一行,即前K个人的成绩。成绩从高到低输出。每两个数据之间有一个空格,末尾没有空格。 5 输出样例: 50 40 输入n(n<=100)个整数,按照绝对值从大到小排序后输出。绝对值相同的两个数,原始值较小的那个数靠前。 第一行输入一个整数n(1<=n<=100); 第二行输入n个待排序的整数(int 范围)。 输出排序后的结果,两个数之间用一个空格隔开,末尾没有空格。 3 输出样例: -4 3 2 为了提高菇菇们的基本素质来抵抗清明SAMA的恐怖袭击,麻麻决定给菇菇们上数学课(数学课有什么用啊喂!(#`O′) ?!)。麻麻给了菇菇们N个从2 开始的连续偶数,要求它们每M个整数计算出平均值,并输出。菇菇们太难过了,该死的数学课总是让人想哭,你能帮帮它们么? 输入仅一行,包括两个整数N(<=100)和M。 输出每M个连续偶数的平均值,末尾不足M个按实际个数计算输出。 3 2 输出样例: 3 6 广袤的戈壁上,为首的菇菇麻麻养了一群以节操为食的起司猫(都没节操喂菇菇了啊喂!还养猫?!)。麻麻每次考虑它们的DM值喂给它们节操。为了让起司猫们不要吃太饱,麻麻决定每次喂给DM值最低的起司猫ai块节操。吃下节操的起司猫DM值将相应地增加ai。 输入格式: 输出格式: 输入样例: 输出样例: 小姑凉自从找到了一直拥有蓝爸爸的方法后就再也不需要小光头了,小光头觉得很难过。于是小光头偷偷跟着小姑凉一起去上数学课,想知道小姑凉怎么变得这么厉害(跟数学课真的有关系么?= =)。他发现从小就只会玩火的小姑凉数学真的糟透了,于是他想出了一个办法,他和小姑凉打赌,如果小姑凉不能解出他给的题目,小姑凉就要把蓝爸爸让给他,还不能生气,要跟他一起愉快地玩耍。小姑凉涉世未深,于是天真地答应了。 小光头的题目是这样的:小光头家有一楼梯共M级,刚开始时你在第一级,若每次只能跨上一级或二级,要走上第M级,共有多少种走法? 当然,从小就只玩火的小姑凉一定是解不出来的啦,你能帮帮她么? 第一行包含一个整数N,表示共有N组数据; 接下来有N行,每行包含一个整数M(1<=M<=40),表示楼梯的级数。 对于每组数据中的楼梯级数,输出不同走法的数量。 3 输出样例: 1 Alice和Bob 整天都喜欢玩无聊的游戏,今天他们玩的游戏的规则是两人轮流从自己的 牌堆的最上方取一张牌,牌上有一个数字,谁的数字大谁就获胜,数字相同时两人都不 算获胜,问最后谁获胜的次数多。输出获胜次数多的人的名字及获胜的次数。获胜次 数相同时算Bob获胜。 第一行为一个正整数N(0 < N <= 1000),表示每个人有N张牌。 第二行包含N个数字,为Alice的牌的大小。 第三行包含N个数字,为Bob牌的大小。 (牌的大小为正整数且不超过1000,输入数字的顺序就是牌堆的牌从上到下的顺序)。 输出有两行,第一行为获胜者的名字; 第二行为获胜的次数。 5 输出样例1: Alice 输入样例2: 5 输出样例2: Bob Shc 有一堆数字。这些数字十分的乱,有正有负。Shc 现在想从这些数字中挑选出一段连续的数字去送给他最喜欢的MAZE。Shc 知道MAZE 喜欢数字越大越好。所以他希望能够选出数字和最大的一段数字送给MAZE。现在需要你算出这段序列的和是多少。 输入格式: 输出格式: 输入样例: 输出样例: 斐波那契数列是一种非常有意思的数列,由0和1开始,之后的斐波那契系数就由之前的两数相加。用数学公式定义长度为n斐波那契数列F则可以看成如下形式: F_0=0; F_1=1; F_i=F_{i-1}+F_{i-2}(2<=i 由于斐波那契数列的增长速度很快,我们在斐波那契数列上进行取模操作,得到对应的长度为n的F’数列: F_0’=0; F_1’=1; F_i’=(F_{i-1}’+F_{i-2}’)%1000000007(2<=i 现在给你一个数列,你需要判断它是否为F’数列。 输入格式: 输出格式: 输入样例1: 输出样例1: 输入样例2: 输出样例2: HHD学长很强,他玩VAN游戏总是赢。 这天他拿出N张牌,想和你玩个游戏,游戏的规则如下: 学长是个好面子的人,如果他输了,他会很不开心。你是个懂事的学弟,为了尽可能让学长赢,你可以趁学长不注意,在某一轮取牌结束后丢掉这张牌。如果丢掉这张牌后,学长还是要输,则输出“RUN”;否则输出你要丢掉的是第几轮取到的牌,使得学长的点数和尽可能大过你。 第一行输入一个正整数N(2 <= N <= 1000),表示有N张牌; 第二行输入N个整数,为牌的点数(牌的点数均为正整数且不超过1000,输入数字的顺序就是牌堆的牌从上到下的顺序)。 输出仅一行,输出一个整数,表示你要丢掉第几次取的牌才能让学长赢得漂亮;否则输出“RUN”。 5 输出样例1: 2 输入样例2: 6 输出样例2: RUN 一次,HHD学长路过一个地摊,发现地摊上陈列着一排算法书,从1-N编号(1<=N<=1000000)。每本书价格为Ai(1<=Ai<=100)。于是他想考考你,当他给出一个区间[L,R],你要立即回答出这个区间内书的价格总和,如果你答对了,他就买下这些书。我们的HHD学长还真是富有啊! 第一行输入两个正整数N,Q(0 < N <= 1000000),N表示书的数量,Q表示询问的次数(0 第二行包括N个整数,表示N本书的价格; 接下来Q行,每行两个整数L、R,表示区间(1<=L<=R<=N)。 输出共Q行,每行对应一次询问的答案。 8 3 输出样例: 16 粉红猪和呲溜喵在玩游戏,规则如下:每个人有N张牌,每张牌有一个数字,从第一张牌开始累加,累加和大的获胜。 第一行包含一个正整数N(0 < N <= 1000),表示有N张牌; 第二行包含N个整数,为呲溜喵的牌的大小; 第三行包含N个整数,为粉红猪牌的大小; 牌的大小可正可负,输入数字的顺序就是牌堆的牌从1到N的顺序。 输出仅一行,为获胜者的名字(pig或者cat);若平局则输出“sad”(不包含引号)。 5 输出样例1: sad 输入样例2: 5 输出样例2: cat 粉红猪比较无聊,他会每次改变当前所有咸鱼的状态(正面翻成反面,反面翻成正面),经过m次操作后,n条咸鱼中有几条是正面朝上的呢? 第一行输入两个正整数n,m(1<=n<=1000,0<=m<=1000)。n代表咸鱼数量,m代表操作次数。 第二行包含n个整数(0或1),表示咸鱼的初始状态,其中0代表反面,1代表正面。 输出仅一个整数,表示经过m次操作后,正面朝上的咸鱼数。 3 3 输出样例: 1 呲溜喵很喜欢吃冰淇凌,特别喜欢夹冰淇凌球,现在给出呲溜喵已经加的冰淇凌球的半径,你能从大到小输出每颗冰淇凌球的体积吗? 第一行输入一个正整数N(0 < N <= 1000),表示有N个冰淇凌球; 接下来N行每行输入一个半径r(r 为1到100的任意实数)。 输出共N行,每行一个数字,表示一个冰淇凌的体积(体积保留两位小数,且按照从大到小的顺序)。 Pi = acos(-1.0) 3 输出样例: 124.79 粉红猪很喜欢斐波那契数列,现在希望你给出第n项的结果。 输入仅一行,包含一个正整数n(1<=n<=55)。 输出仅一个整数,表示斐波那契数列第n项的值。 3 输出样例: 2 粉红猪不喜欢一些数字,所以他不希望这些数字出现在序列中。现在请你来帮粉红猪删除这些数字。 输入一共四行。 第一行输入一个正整数N(1<=N<=1000); 接下来一行包括N个整数; 第三行一个正整数M(0<=M<=100),代表粉红猪不喜欢的数的个数; 接下来一行包括M个数,代表粉红猪不喜欢的数(保证互不相同)。 输出处理后的序列,其他元素位置不变(行末无空格,仅有回车);如果删除后没有元素存在,只输出行末的回车。 6 输出样例: 1 2 5 3 4 转眼间双十一又来了,又到了戈壁上菇菇一族分配土地的日子(什么奇葩设定啊!)。为了公平起见,麻麻想出了一个聪明的办法:将土地分为N块,菇菇们一起到每块土地区域接受任务,最后完成任务最多的菇菇有优先选择权。因为可能在一个区域上重复接受任务,菇菇们记混了任务属于哪个区域,你能帮忙它们抢到选择权么? 第一行输入一个整数N(<=100),表示共有N个区域。 接下来有多行,每行两个整数a和b,表示在a区域接受了b个任务(同一个区域可能接受多次),当a、b同为0时结束输入。 输出共N行,每行包含两个整数a和b,a为区域编号,b表示a区域共接受了多少任务。(要求按区域编号从小到大排序,区域编号不大于100) 3 输出样例: 1 10 给定一个n*m的矩阵,请你帮忙求出这个矩阵的转置矩阵。 第一行包含两个正整数n,m(0 < n,m <= 1000)。 接下来有n行,每行包含m个正整数,每两个数之间用一个空格隔开。所有的正整数均满足小于等于1000。 输出共m行,每行有n个正整数,每两个数之间用一个空格隔开,行末没有空格。即原矩阵的转置矩阵。 3 2 输出样例: 1 3 4 医院每天会有很多病人,现在给出病人的编号(编号可能相同)和生病的严重程度(数值越大越严重),希望你将病人排序后输出(生病严重程度从大到小,相同程度的编号小的在前)。 第一行输入一个正整数N(1<=N<=10^3); 接下来N行,每行两个整数id,priority,分别代表病人编号和生病严重程度。 输出共N行,每行一个整数,即按要求排好序的病人的编号。 2 输出样例: 2 AC monster对Accept情有独钟。 现在希望你能找出输入的字符串中所含“Accept”的个数。 例如:WEQAcceptopiacceptwAcceptqqq中含有2个“Accept”子串。 输入仅一行,包含一个长度不超过10000个字符的字符串。 输出一个整数,表示“Accept”子串的个数。 aeqweqsssaccept 输出样例1: 0 输入样例2: Acceptiiiioac 输出样例2: 1 呲溜喵很喜欢7这个数字,请你找出输入字符串中,长度为7的所有回文串。 输入仅一行,包括一个长度不超过1000的字符串。 分多行输出原字符串中所有长度为7的回文子串,每行输出一个,行末均有回车(数据保证有解)。 abababacacadddac 输出样例: abababa 输入一个字符串,对该字符串进行逆序,输出逆序后的字符串。 输入在一行中给出一个不超过80个字符长度的、以回车结束的非空字符串。 在一行中输出逆序后的字符串。 Hello World! 输出样例: !dlroW olleH 方法一:数组实现 方法二:引入gets及strlen 本题要求编写程序,将给定字符串中的大写英文字母按以下对应规则替换: 输入格式: 输入在一行中给出一个不超过80个字符、并以回车结束的字符串。 输出在一行中给出替换完成后的字符串。 Only the 11 CAPItaL LeTtERS are replaced. 输出样例: Lnly the 11 XZKRtaO OeGtVIH are replaced. 本题要求编写程序,统计并输出某给定字符在给定字符串中出现的次数。 输入第一行给出一个以回车结束的字符串(少于80个字符);第二行输入一个字符。 在一行中输出给定字符在给定字符串中出现的次数。 programming is More fun! 输出样例: 2 方法一:数组实现 方法二:引入gets及strlen 一个IP地址是用四个字节(每个字节8个位)的二进制码组成。请将32位二进制码表示的IP地址转换为十进制格式表示的IP地址输出。 输入在一行中给出32位二进制字符串。 在一行中输出十进制格式的IP地址,其由4个十进制数组成(分别对应4个8位的二进制数),中间用“.”分隔开。 11001100100101000001010101110010 输出样例: 204.148.21.114
输出格式:
输入样例:
3 5 3 2
3#include
#include
7-6 数组-歌手得分
输入格式:
输出格式:
输入样例:
100 99 98 97#include
7-7 数组-前K个成绩
输入格式:
输出格式:
输入样例:
10 20 30 40 50
2#include
7-8 数组-绝对值排序
输入格式:
输出格式:
输入样例:
3 -4 2#include
7-9 数组-该死的数学课
输入格式:
输出格式:
输入样例:#include
7-10 数组-麻麻的起司猫
第一行输入两个正整数N,M(0
第三行包括M个整数,表示每次喂食的节操ai。
输出仅一行,表示M次喂食过后DM值最低的起司猫的DM值(保证数据不超过10^9)。
3 1
1 2 3
3
2#include
7-11 数组-小光头的反攻
输入格式:
输出格式:
输入样例:
1
2
3
1
2#include
7-12 数组-无聊的游戏
输入格式:
输出格式:
输入样例1:
1 2 4 4 5
5 4 3 2 1
3
1 2 3 4 5
5 4 3 2 1
2#include
7-13 数组-Shc的数字
第一行为一个正整数N(0 < N <= 100000),表示有N个数;
第二行输入N个数 Ai (-1000 <= Ai<= 1000)。
输出仅一个整数,表示最大的一段数字和值。
5
-1 2 -3 4 5
9#include
7-14 数组-简单的斐波那契数列
第一行包含一个正整数n(1<=n<=1000),表示有n个数;
第二行包含n个非负整数,均在int范围内。
输出仅一行,如果输入的数列是长度为n的F’数列则输出“YES”,否则输出“NO”。
4
0 1 1 3
NO
8
0 1 1 2 3 5 8 13
YES#include
7-15 数组-简单的游戏
每张牌的点数为Ai(1<=i<=N),两人从牌堆顶轮流取牌,为了表示尊重,由学长先手取牌,最后点数之和大的获胜。
输入格式:
输出格式:
输入样例1:
1 2 4 4 5
1 2 1 4 1 6#include
7-16 数组-买买买
输入格式:
输出格式:
输入样例:
5 4 7 2 5 8 7 7
1 3
8 8
4 5
7
7#include
7-17 数组-牌面累加
输入格式:
输出格式:
输入样例1:
1 2 4 3 5
5 4 3 2 1
1 2 3 4 5
5 -1 -1 -1 -1#include
7-18 数组-咸鱼翻身
输入格式:
输出格式:
输入样例:
1 0 1#include
7-19 数组-冰欺凌球
输入格式:
输出格式:
输入样例:
1.2
2.4
3.1
57.91
7.24#include
7-20 数组-粉红猪的斐波那契数列
输入格式:
输出格式:
输入样例:#include
7-21 序列元素删除
输入格式:
输出格式:
输入样例:
1 2 5 3 4 5
1
5#include
7-22 数组-田地之争
输入格式:
输出格式:
输入样例:
1 3
2 3
3 4
1 7
0 0
2 3
3 4#include
7-34 数组-转置矩阵
输入格式:
输出格式:
输入样例:
1 2
3 4
4 5
2 4 5#include
7-37 数组-病人排序
输入格式:
输出格式:
输入样例:
1 100
2 10000
1#include
7-43 数组-帮AC怪找子串
输入格式:
输出格式:
输入样例1:#include
7-44 数组-LEN7回文串
输入格式:
输出格式:
输入样例:
cadddac#include
7-45 字符串逆序
输入格式:
输出格式:
输入样例:#include
#include
7-46 字符串替换
原字母 对应字母
A Z
B Y
C X
D W
… …
X C
Y B
Z A
输出格式:
输入样例:#include
7-47 统计字符出现次数
输入格式:
输出格式:
输入样例:
m#include
#include
7-48 IP地址转换
输入格式:
输出格式:
输入样例:#include