1001 随机序列

链接:登录—专业IT笔试面试备考平台_牛客网
来源:牛客网

题目描述

国中生Chino总是做不完数学作业,Cocoa想来帮忙,但作业太多了,怎么也做不完。

Chino的数学作业由T(1≤T≤100)T(1\leq T\leq 100)T(1≤T≤100)张试卷组成,每张试卷上有n(1≤n≤103)n(1\leq n\leq 10^3)n(1≤n≤103)个数a1..n(1≤a≤5000)a_{1..n}(1\leq a\leq 5000)a1..n​(1≤a≤5000),Chino需要算出这些数的极差和方差。极差是一个整数,方差是一个浮点数,要求保留到小数点后3位。

虽然题目很简单,但计算量对于Chino来说实在太大啦!你能帮一帮她吗?

P.S.:一个数列的极差是指数列中最大的数减去最小的数,方差是指算出数列中每个数与数列平均值之差的平方后,对其求和,再除以数列元素个数得到的结果。

输入描述:


输入的第一行有一个数T,表示试卷的数量;接下来的每2行,第一行有一个数n,表示当前试卷上数字的个数;第二行有n个数字aia_iai​,表示这张试卷上的每一个数。

输出描述:

对每张试卷,输出一行两个数,分别表示这些数字的极差和方差,中间用空格分开。其中极差是整数,方差是保留到小数点后3位的浮点数。

代码:

#include<stdio.h>
#include<math.h>
int main()
{int t,n,a[5000];int i=0,j,jicha,max,min,sum;double fangcha,aver;scanf("%d",&t);for(i=0;i<t;i++){scanf("%d",&n);sum=0;fangcha=0;jicha=0;
//以上三个变量每次循环前记得归零for(j=0;j<n;j++){scanf("%d",&a[j]);sum+=a[j];}max=min=a[0];aver=1.0/n*sum;for(j=0;j<n;j++){if(a[j]>max) max=a[j];if(a[j]<min) min=a[j];fangcha+=pow(a[j]-aver,2);//方差}jicha=max-min;//极差printf("%d %.3f\n",jicha,fangcha/n);}return 0;
}

思路:

利用输入和循环的配合,来保证输入数据个数正确。每次循环后输出当前的结果,之后进行下一轮循环中的输入。

思路:

1002 [NOIP2013]记数问题

链接:登录—专业IT笔试面试备考平台_牛客网
来源:牛客网

题目描述

试计算在区间1 到n 的所有整数中,数字x(0 ≤ x ≤ 9)共出现了多少次?

例如,在1到11 中,即在1、2、3、4、5、6、7、8、9、10、11 中,数字1 出现了4 次。

输入描述:

输入共1行,包含2个整数n、x,之间用一个空格隔开。

输出描述:

输出共1行,包含一个整数,表示x出现的次数。

代码:

#include <stdio.h>
int main ()
{int i,j,a,t=0,n;scanf("%d %d",&n,&a);for(i=1;i<=n;i++)
//一个循环,依次判断当前数字i,是否是指定数字a{for(j=i;j;j/=10)
//判断条件为j,当j被除至商为0时停止
//此时刚好判断完i所有位数是否含指定数字a{if(j%10==a)t++;} }printf("%d",t);return 0;
}

思路:

1. 当前代码思路:

思路较为简单,从1到n依次判断每个数中含有几个a,累加起来。

2. 刚开始的个人思路:

起初感觉一个一个循环,判断,计数太过耗时,于是为避免一个一个数去判断和计数,尝试用分析规律,直接计算的方式来编,降低时间复杂度。分析n的每一位上的数与指定数字a的大小关系,直接计算从1到n的n个数中,个位、十位、百位...出现a的次数——结果编不出来,测试用例连一半都没过,自己实在分析不出来,于是我屈服了,屈服给了嵌套循环。

后续:用这个思路ac了,运行时间也降下来了!

代码:

#include <stdio.h>
int main ()
{int i,j,a,ans=0,n;scanf("%d %d",&n,&a);for(i=1;n/i;i*=10){if(a==0)
//a==0情况特殊单独讨论{if(n/i<10) break;
//a==0时,最大位上的数不能参与计算
//且最高位不可能为0if((n/i)%10>a)
//当 当前位上的数 大于a(也就是0)时
//同一般情况下的 ((n/i)%10<a)
//因为是从1开始的计数,而不是从0开始的
//所以才是和 ((n/i)%10<a)情况相同
//而不是 ((n/i)%10>a)的情况ans+=(n/i/10)*i;
/*
以255为例
个位是0的情况:10 20 ... 100(只会计算个位的0的个数,所以不必担心十位上的0是否会漏掉)... 200 ... 250   共25个符合表达式:n/10
十位是0的情况:100 101 102 ... 109 200 201 ... 209 共20个符合表达式:n/100*10
测试多组类似数据后,
于是可以发现规律:(n/i/10)*i;
*/else
//当 当前位上的数 等于a(也就是0)时
//此情况与一般情况的 当前位的数【(n/i)%10==a】不一样ans+=n-(n/i*i-1)+((n/i-1)/10)*i;
/*
以207为例
个位是0:10 20 ... 200 共20个不够特殊,下一位
十位是0:100 101 ... 109 200 201 ... 207 共18位很明显不可以与【a==0&&(n/i)%10>a】的情况共用同一表达式所以才有对本情况的讨论经过多组数据的测试最终才得出一个表达式:n-(n/i*i-1)+((n/i-1)/10)*i(其实这个表达式的具体意义我也不算很清楚,毕竟是试出来的)
*/}else
//一般情况的讨论与分析过程类似a==0的情况,不再一一赘述了(其实是讲不清){if((n/i)%10<a)ans+=(n/i/10)*i;else if((n/i)%10>a)ans+=(n/i/10+1)*i;else ans+=n-(n/i*i-1)+(n/i/10)*i;}}printf("%d",ans);return 0;
}

运行时间直接降到个位数!!! 嘴角疯狂上扬!

咳咳,毕竟第一次,多少得意一点应该没事吧(小声)

本代码通过和原本已经ac的(思路1的)代码进行对比,分析各种情况的输入下的输出差异,来进行调试,毕竟题目公布出来的测试用例只有一组,很难分析代码为什么没有通过,自己是漏掉了哪种情况。

自己列测试用例要考虑的情况:

  • 一般情况(a!=0)

    • 某一位上的数大于指定数a
    • 某一位上的数等于指定数a
    • 某一位上的数小于指定数a
    • eg:456 5      456 7      456 3......
  • 特殊(a==0)
    • 某一位上不是0
    • 某一位上等于0
    • eg:105 0      150 0       255 0      100 0......

其他具体见代码注释,emm,不过本人不太能把“为什么是这个表达式”讲清楚,所以凑活看吧

1003 约瑟夫环

链接:登录—专业IT笔试面试备考平台_牛客网
来源:牛客网

题目描述

n个人(0,1,2,3,4...n-1),围成一圈,从编号为k的人开始报数,报数报到m的人出队(报数是1,2,...m这样报的)。下次从出队的人之后开始重新报数,循环往复,当队伍中只剩最后一个人的时候,那个人就是大王。现在,给定n,k,m,
请你求出大王的编号。

输入描述:

输入一行包含三个整数n,k,m1<=n<=100,1<=k<=n-1,1<=m<=100

输出描述:

输出一个整数

代码:

#include<stdio.h>
int main()
{int n,k,m;scanf("%d %d %d",&n,&k,&m);int i,a[n],m_num=0,sum=0;
//m_num是正在报的数,sum是已经出队的数for(i=0;i<=n;i++)a[i]=0;for(i=k;i<=n;i++)//此处判断条件可有可无
//必须是<=n,不然一旦加到n就会退出循环{if(i==n) i=0;
//循环过程,使数组形成一个“环”if(a[i]!=1)
//当a[i]不是已退出的人时(a[i]==1即为已退出)m_num++;else continue;if(m_num==m){a[i]=1;//出队m_num=0;//报数归零,从新开始sum++;}if(sum==n-1)
//当退队人数为n-1时就退出break;}for(i=0;i<n;i++){if(a[i]!=1){printf("%d",i);break;}}return 0;
}

思路:

定义一个长度为 a[n] 数组,默认状态为0,当数值变为1时认为退出队列。用循环实现”闭环”,当i==n时另i=1,实现闭环。另定义一个数m_num表示报数,当m_num等于m时,另此时的a[i]退出队列,并让已退出队列的人的个数sum加一。当sum==n-1时,出现“大王”,跳出循环。后续输出部分,以a[i]的状态判断是否是还在队中的那个数,是的话就输出。

1004 [NOIP2005]校门外的树

链接:登录—专业IT笔试面试备考平台_牛客网
来源:牛客网

题目描述

某校大门外长度为L的马路上有一排树,每两棵相邻的树之间的间隔都是1米。我们可以把马路看成一个数轴,马路的一端在数轴0的位置,另一端在L的位置;数轴上的每个整数点,即0,1,2,……,L,都种有一棵树。

由于马路上有一些区域要用来建地铁。这些区域用它们在数轴上的起始点和终止点表示。已知任一区域的起始点和终止点的坐标都是整数,区域之间可能有重合的部分。现在要把这些区域中的树(包括区域端点处的两棵树)移走。你的任务是计算将这些树都移走后,马路上还有多少棵树。

输入描述:

第一行有两个整数:L(1 <= L <= 10000)和 M(1 <= M <= 100),L代表马路的长度,M代表区域的数目,L和M之间用一个空格隔开。接下来的M行每行包含两个不同的整数,用一个空格隔开,表示一个区域的起始点和终止点的坐标。

输出描述:

包括一行,这一行只包含一个整数,表示马路上剩余的树的数目。

代码:

#include<stdio.h>
int main()
{int l,m;int i,j,a,b,sum=0;int c[10001]={0};
//0~10000共10001个数,默认为0
//千万别填成1000,
//否则会出现 if语句的判断条件不同,输出的结果不同
//如(c[j]!=1)和(c[j]==0),明明表示同一含义
//但前者可以通过所有测试用例
//而后者不可以,总有20%无法通过
//而当输出结果忘记+1时,却有20%的通过了
//所以注意不要将数组的长度定义短了,否则数组会溢出
//可能出现乱赋值的情况scanf("%d %d",&l,&m);for(i=0;i<m;i++){scanf("%d %d",&a,&b);for(j=a;j<=b;j++){if(c[j]==0)
//为默认值的话,就修改为1
//在此基础上进行计数,记录目前已经被移除的树的数目{c[j]=1;sum++;}}}printf("%d",l+1-sum);return 0;
}

思路:

定义一个数组,表示l+1颗树,默认为0表示目前没有被移除,当数值变为1时,认为已经被移除,最后直接输出总课数减去被移除的颗数。

1005 比较月亮大小

链接:登录—专业IT笔试面试备考平台_牛客网
来源:牛客网

题目描述

点点是一名出色的狼人。众所周知,狼人只有在满月之夜才会变成狼。

同时,月亮的大小随着时间变化,它的大小变化30天为一循环。它的变化情况(从第一天开始)为0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1 然后又再一次循环。

今年夏天点点很无聊,于是开始看月亮。由于点点很忙,所以他只选择一段连续的时间看月亮,并把月亮的大小记录了下来。

现在,他告诉你他记录下东西,让你告诉他下一天(即点点记录下的最后一天的第二天)的月亮是比前一天(即点点记录下的最后一天)大还是小。

输入描述:

给你一个正整数n表示点点记录下的时间个数。
下一行n个自然数表示点点记录下的月亮大小。

输出描述:

一个字符串。
如果下一天的比前一天的大则输出"UP"
如果下一天的比前一天的小则输出"DOWN"
如果无法判断则输出"-1"

代码:

#include<stdio.h>
int main()
{int n,i;scanf("%d",&n);int a[n];int *p=a;for(i=0;i<n;i++)scanf("%d",++p);if(*p==15) printf("DOWN");
//不论输入几个数,最后输入的数为15,则必DOWNelse if(*p==0) printf("UP");
//不论输入几个数,最后输入的数为0,则必UPelse if(n==1&&*p!=0&&*p!=15) printf("-1");
//只有一个数,且不是以上两情况,则无法判断else if(n!=1&&*(p-1)>*p) printf("DOWN");
//不是上述所有情况,且倒数第二个数比最后一个数大,
//那么根据此走势,结果必为DOWNelse printf("UP");
//不是上述所有情况,则是UPreturn 0;
}

思路:

分析题目后可以得出,我们只用关心最后一个输入的数以及它于前一个数的大小关系(已知天数>1),尤其是最后输入的数,其很大程度上决定了结果是怎样的。具体分情况讨论见代码。

1006 求距离

链接:登录—专业IT笔试面试备考平台_牛客网
来源:牛客网

题目描述

给你一个1 -> n的排列,现在有一次机会可以交换两个数的位置,求交换后最小值和最大值之间的最大距离是多少?

输入描述:

第一行一个数n
之后一行n个数表示这个排列

输出描述:

输出一行一个数表示答案

代码:

#include<stdio.h>
int main()
{int n,i,k,j,ans,t;scanf("%d",&n);int a;for(i=1;i<=n;i++){scanf("%d",&a);if(a==n)k=i;if(a==1)j=i;
//k和j分别表示n与1所在的位置序号}if(k<j)//确保k于j有确定的大小关系{t=k;k=j;j=t;}ans=(k>n-j)?k-1:n-j;
//比较左侧的最值据最右侧的数有多远,
//比较右侧的最值据最左侧的数有多远,
//两者之中较大值即为交换后可以相距的最远距离printf("%d",ans);return 0;
}

思路:

进行一次交换,使两最值相聚最远,那么就是将两者之一与最边缘的数调换位置

思路1(本代码采用):

得出两最值所在位置序号后,计算 左侧的最值与右边缘的数的距离 和 右侧最值与左边缘的数距离,取最大即为结果。

思路2:

不做思考,分别计算两最值分别于左右两边缘数的距离,取最大值。

1007 数列下标

链接:登录—专业IT笔试面试备考平台_牛客网
来源:牛客网

题目描述

给出一个数列 A,求出一个数列B.

其中Bi   表示 数列A中 Ai 右边第一个比 Ai 大的数的下标(从1开始计数),没有找到这一个下标  Bi 就为0

输出数列B

输入描述:


第一行1个数字 n (n ≤ 10000)

第二行n个数字第 i 个数字为 Ai (0 ≤ Ai  ≤ 1000000000)

输出描述:

一共一行,第 i 个数和第 i+1 个数中间用空格隔开.

代码:

#include<stdio.h>
int main()
{int i,n,k;scanf("%d",&n);int a[n],b[n];for(i=0;i<n;i++){scanf("%d",&a[i]);b[i]=0;//默认为0,遇到右侧有必b[i]大的在该值}for(i=0;i<n-1;i++)
//a[n-1]右侧无值,所以b[n-1]必为零,i=n-1不用再判断{for(k=i+1;k<=n-1;k++){if(a[k]>a[i]) {b[i]=k+1;
//题目要求进行的运算
//将i右侧的,第一个比b[i]大的a[i]的下表(i+1)赋值给b[i]break;}}}for(i=0;i<n;i++)printf("%d ",b[i]);return 0;
}

思路:

循环遍历即可,最右侧的数必定为0。具体见代码注释。

1008 求逆序数

链接:登录—专业IT笔试面试备考平台_牛客网
来源:牛客网

题目描述

在一个排列中,如果一对数的前后位置与大小顺序相反,即前面的数大于后面的数,那么它们就称为一个逆序。一个排列中逆序的总数就称为这个排列的逆序数。

比如一个元素个数为4的数列,其元素为2,4,3,1,则(2,1),(4,3),(4,1),(3,1)是逆序,逆序数是4

现在求给定数列的逆序数

输入描述:


第一行为N,表示数列的元素个数(N<=2000)

第二行为N个用空格隔开的整数,其值在int范围内

输出描述:

输出占一行,为逆序数的个数

代码:

#include<stdio.h>
int main()
{int i,j,n,ans=0;scanf("%d",&n);int a[n];for(i=0;i<n;i++)scanf("%d",&a[i]);for(i=0;i<n;i++)for(j=i+1;j<n;j++){if(a[i]>a[j]) ans++;}printf("%d",ans);return 0;
}

思路:

循环遍历即可。

1009 F课程满意度计算

链接:登录—专业IT笔试面试备考平台_牛客网
来源:牛客网

题目描述

宇宙集团对QIT的课程做了一个满意度调查,一共在校园内抽取了N个同学,对本学期的M种课程进行满意度调查。宇宙集团的小Y想知道,有多少门课是被所有调查到的同学都喜欢的。

输入描述:

第一行输入两个整数N, M(1 <= N, M <= 1000)
接下来的N行里, 每行的开头有一个整数A(0 <= A <= M),表示这个同学喜欢的课程数量,接下来的A个元素表示他所喜欢的课程编号(1 <= 编号 <= M),每个元素之间以空格间隔。

输出描述:

输出一个整数表示答案。

代码:

#include<stdio.h>
int main()
{int m,n;scanf("%d %d",&n,&m);int i,sum,j,course[m],number,ans=0;for(i=0;i<m;i++)course[i]=0;
//course[i]表示喜欢课程i+1的人数for(i=0;i<n;i++){scanf("%d",&sum);for(j=0;j<sum;j++){scanf("%d",&number);course[number-1]++;
//统计:喜欢课程number的人数+1}}for(i=0;i<m;i++){if(course[i]==n)
//当所有人都喜欢课程i+1ans++;}printf("%d",ans);return 0;
}

思路:

统计每个课程喜欢的人数,结果==n,那么结果加一。

1010 二进制?十进制!

链接:登录—专业IT笔试面试备考平台_牛客网
来源:牛客网

题目描述

给定两个十进制整数 : AAA,BBB

你需要把它们的二进制形式十进制的运算法则相加输出结果。

例如:

A=3,B=2A = 3 , B = 2A=3,B=2 的时候,AAA 的二进制表示是 : 111111 , BBB 的二进制表示是 101010 ,你需要输出答案为 : 212121

输入描述:

一行两个十进制整数: AAA,BBB

输出描述:

一行一个整数,表示相加的结果。

代码:

#include<stdio.h>
int main()
{long binary(int a);int a,b;scanf("%d %d",&a,&b);printf("%ld",binary(a)+binary(b));
}
long binary(int a)
//将十进制数变成二进制(以十进制形式存储)
//十进制转换二进制的计算方法:
//除二取余,倒序书写
{if(a==1) return 1;else return(binary(a/2)*10+a%2);
//第一次除2,取余,结果存储在个位上
//第二次除2,取余,结果存储在十位上
//以此类推,知道除2后结果是0,取余为1
//由此可写出一个递归的函数,表示二进制结果(按十进制储存)
}

思路:

关键在于将十进制转化为二进制,并以十进制形式存储,以便进行题目要求的a+b计算。十进制转化二进制按一般计算思路即可。

思路1(本代码采用):

递归实现。

思路2:

循环实现。具体还没有操作,不过递归可以干的,循环应该也可以。

1011 序列中整数去重

链接:登录—专业IT笔试面试备考平台_牛客网
来源:牛客网

题目描述

输入n个整数的序列,要求对这个序列进行去重操作。所谓去重,是指对这个序列中每个重复出现的整数,只保留该数第一次出现的位置,删除其余位置。

输入描述:


输入包含两行,第一行包含一个正整数n(1 ≤ n ≤ 1000),表示第二行序列中数字的个数;第二行包含n个整数(范围1~5000),用空格分隔。

输出描述:


输出为一行,按照输入的顺序输出去重之后的数字,用空格分隔。

代码:

#include<stdio.h>
int main()
{int n;scanf("%d",&n);int i,a[n],j,flag,num,k=0;for(i=0;i<n;i++){scanf("%d",&num);flag=0;for(j=0;j<i;j++){if(a[j]==num){flag=1;++k;}}if(flag!=1)a[i-k]=num;}for(i=0;i<n-k;i++)printf("%d ",a[i]);return 0;
}

思路:

思路1(本代码思路):

一个数组,在输入时进行判断,判断输入值是否早已被存入,没有被存入,则按顺序存储(需要一个辅助用的数k,来保证输入的数是被连续存入的)。

思路2:

两个数组,a存输入,b存输出。输出部分在输入阶段进行判断,判断是否将a中的某个值按顺序存入b(无需辅助用的数k,和思路1相比的不同点仅此而已)

1012 有序序列插入一个整数

链接:登录—专业IT笔试面试备考平台_牛客网
来源:牛客网

题目描述

有一个有序数字序列,从小到大排序,将一个新输入的数插入到序列中,保证插入新数后,序列仍然是升序。

输入描述:

第一行输入一个整数N(0≤N≤50)。第二行输入N个升序排列的整数,输入用空格分隔的N个整数。第三行输入想要进行插入的一个整数。

输出描述:

输出为一行,N+1个有序排列的整数。

代码:

#include<stdio.h>
int main()
{int num;scanf("%d",&num);int a[num+1];int i,temp;for(i=0;i<num;i++)scanf("%d",&a[i]);scanf("%d",&a[i]);
//将插入的数默认排到最后for(;i>=0;i--)
//循环,判断,判断是否将该插入的数与前一个数交换{if(a[i]<a[i-1]){temp=a[i];a[i]=a[i-1];a[i-1]=temp;}
//知道整个数组成为升序排列,跳出循环else break;}for(i=0;i<num+1;i++)printf("%d ",a[i]);return 0;
}

思路:

根据题意,因为输入的序列是有序序列,所以只需考虑如何将插入的数放在对的位置。

思路1(本代码):

输入时,将其插入最后的位置,再让它依次与前一个数比较,如果该插入的数小于前一个数,则于前一个数交换,直到符合题意后,跳出循环。

思路2:

不过多考虑,输入全部数后,直接用排序算法{冒泡,选择......}重排。

1013 打印质数表

链接:登录—专业IT笔试面试备考平台_牛客网
来源:牛客网

题目描述

输入一个自然数N,按质数定义从小到大输出1~N(包含N)中所有的质数

输入描述:

输入一行,包含一个整数N1 <= N <= 2000

输出描述:

输出一行,包含所有的质数,按照从小到大的顺序输出,以空格隔开。

代码:

#include<stdio.h>
#include<math.h>
int main()
{int n,i,j,flag;scanf("%d",&n);for(i=2;i<=n;i++){flag=0;for(j=2;j<=sqrt(i);j++)
//素数判断
//此处可进一步优化,除了2以外的偶数不可能是质数
//可以借此将2独立出来,以减少循环次数{if(i%j==0) flag=1;}if(flag==0)printf("%d ",i);}return 0;
}

思路:

循环与质数判断结合

素数判断部分优化:

if(sqrt(i)>=2&&i%2==0)flag=1;elsefor(j=3;j<=sqrt(i);j+=2){if(i%j==0) flag=1;}

1014 素数分布

链接:登录—专业IT笔试面试备考平台_牛客网
来源:牛客网

题目描述

素数分布函数π(n)\pi (n)π(n)表示小于或等于n的素数的数目。例如π(10)=4\pi (10)=4π(10)=4(2,3,5,7是素数)。这个函数涉及到许多高等数论的内容,甚至和黎曼猜想挂钩,目前还有很多数学家正在不断探索其中的奥秘。千里之行始于足下,现在你开始关心一个问题:在正整数域中素数的分布是怎么样的。为了探索这个问题,你需要计算出一些π(n)\pi (n)π(n)的值。

输入描述:

第一行一个整数T(T≤1000)T(T \le 1000)T(T≤1000),表示数据的组数。
接下来一共T行,第i+1(1≤i≤T)i+1(1 \le i \le T)i+1(1≤i≤T)行表示第i组数据。每行一个正整数n(n≤1000)n (n\le 1000)n(n≤1000)。

输出描述:

输出T行,第i行对应输入的第i组数据。每行一个正整数,表示π(n)\pi (n)π(n)的值。

代码:

#include<stdio.h>
#include<math.h>
int main()
{int t,i;scanf("%d",&t);int n[t],ans[t];for(i=0;i<t;i++){scanf("%d",&n[i]);ans[i]=0;}for(i=0;i<t;i++)
//第一层循环,遍历n[t],以输出小于n[i]的素数的个数{for(int j=2;j<=n[i];j++)
//第二层循环,遍历小于n[i]的整数,以计数小于n[i]的素数个数{int flag=0;for(int k=2;k<=sqrt(j);k++)
//第三层循环,质数判断(可优化,具体见1013)
//若该整数是质数,ans[i]++,计数{if(j%k==0){flag=1;break;}}if(flag==0)ans[i]++;}}for(i=0;i<t;i++)printf("%d\n",ans[i]);return 0;
}

思路:

多层嵌套,判断质数,记录质数个数具体见代码注释

1015 有序序列合并

链接:登录—专业IT笔试面试备考平台_牛客网
来源:牛客网

题目描述

输入两个升序排列的序列,将两个序列合并为一个有序序列并输出。

数据范围: 1≤n,m≤1000 1 \le n, m \le 1000 \ 1≤n,m≤1000  , 序列中的值满足 0≤val≤30000 0 \le val \le 30000 \ 0≤val≤30000

输入描述:

输入包含三行,第一行包含两个正整数n, m,用空格分隔。n表示第二行第一个升序序列中数字的个数,m表示第三行第二个升序序列中数字的个数。第二行包含n个整数,用空格分隔。第三行包含m个整数,用空格分隔。

输出描述:

输出为一行,输出长度为n+m的升序序列,即长度为n的升序序列和长度为m的升序序列中的元素重新进行升序序列排列合并。

代码:

#include<stdio.h>
int main()
{int n,m;scanf("%d %d",&n,&m);int a[n+m];int i,j,temp;for(i=0;i<n+m;i++)scanf("%d",&a[i]);for(i=0;i<m+n-1;i++){for(j=0;j<m+n-1-i;j++){if(a[j]>a[j+1]){temp=a[j];a[j]=a[j+1];a[j+1]=temp;}}}for(i=0;i<m+n;i++)printf("%d ",a[i]);return 0;
}

思路:

思路1:

合并输入,排序

(可以尝试的)思路2:

借鉴1012,插入一个整数变为插入一个数组的所有元素,应该可以实现。

牛客竞赛-新手上路-语法入门-数组字符串 .c相关推荐

  1. 牛客竞赛-新手上路-语法入门-选择结构.c

    F 吃瓜群众 链接:https://ac.nowcoder.com/acm/contest/19304/F 来源:牛客网 题目描述 群众想要吃瓜,于是给你一个瓜让你切,但是作为考验 告诉你西瓜的重量, ...

  2. 牛客竞赛-新手上路-语法入门-顺序结构 .c

    1006-1008 输出语句的""中,个别字符的表达 注意: 百分号:%% 单引号,双引号,反斜杠:\对应字符 1017-1018 星期几的计算 注意: (记星期x,后过了n天) ...

  3. 牛客竞赛语法入门班顺序结构习题C++版本参考代码及部分解析

    牛客竞赛语法入门班顺序结构习题 C语言版本的参考代码 重点题: 1005 乘法表 1006 KiKi学程序设计基础 1017 水题再次来袭:明天星期几? 1018 开学? 1019 helloworl ...

  4. 牛客竞赛语法入门班数组栈、队列和stl习题

    牛客竞赛语法入门班数组栈.队列和stl习题 L 指纹锁 set ,自带排序功能 可重写排序函数 cmp,注意外边写的要写成 operator()operator()operator(),结构体内部的排 ...

  5. 【python】牛客竞赛语法入门班顺序结构习题 python解法

    题目链接:牛客竞赛语法入门班顺序结构习题_ACM/NOI/CSP/CCPC/ICPC算法编程高难度练习赛_牛客竞赛OJ 目录 1001 这是一道签到题 1002 排列式 1003 小飞机 1004 学 ...

  6. 牛客竞赛:第三届超越杯程序设计团体赛题解

    比赛链接:第三届超越杯程序设计团体赛重现赛_ACM/NOI/CSP/CCPC/ICPC算法编程高难度练习赛_牛客竞赛OJhttps://www.nowcoder.com/acm/contest/313 ...

  7. 项链(牛客竞赛2020-普及组第四场-T4)

    项链(牛客竞赛2020-普及组第四场-T4) 题目 原题链接 样例 输入1 4 3 4 3 -2 1 1 2 2 3 3 4 输出1 7 1 说明1 第一组样例,最优路径为1→2→3→41 \to 2 ...

  8. 牛客题霸 [ 数字在升序数组中出现的次数] C++题解/答案

    牛客题霸 [ 数字在升序数组中出现的次数] C++题解/答案 题目描述 统计一个数字在升序数组中出现的次数. 题解: 直接for循环,if判断一下,如果是目标的话ant++ 代码: class Sol ...

  9. 关于构造和二进制,题目:牛牛的DRB迷宫Ⅱ(源自牛客竞赛2020年寒假集训)

    关于构造和二进制,题目:牛牛的DRB迷宫Ⅱ(源自牛客竞赛2020年寒假集训) 题目: 链接:https://ac.nowcoder.com/acm/contest/3004/B 来源:牛客网 题目描述 ...

最新文章

  1. LeetCode简单题之判断国际象棋棋盘中一个格子的颜色
  2. 将标签one-hot化的方法
  3. Eclipse中新建jsp提示The superclass javax.servlet.http.HttpServlet was not found on the Java Build Path
  4. Qt学习笔记之样式表
  5. Linux系统【一】CPU+MMU+fork函数创建进程
  6. k8s环境问题及解决方案
  7. 【LeetCode】64. Minimum Path Sum
  8. JavaWeb学习(二)Maven
  9. python 车牌识别简单_如何用 Python 识别车牌
  10. 图像的旋转——imrotate
  11. 企业安全-003NTA大法
  12. 腾讯云表格识别Python-SDK使用
  13. 「 Mac应用加密工具」AppLocker for Mac 2.7.0
  14. 二、Win10如何解决svchost一直占用网速和内存?
  15. Excel表格标题重复打印
  16. 用 python 操作 Acad 绘图 的学习笔记
  17. 大学计算机一级网络题,大学计算机一级考试试题及答案
  18. python爬虫网易云音乐评论再分析_Scrapy爬取网易云音乐和评论(一、思路分析)...
  19. mysql存储过程重命名_MySQL数据库重命名存储过程
  20. 卸下皮肤和排位,亲近自然,别让游戏成瘾_数字体验_新浪博客

热门文章

  1. 软件测试——bug处理流程图,让你上班少走弯路
  2. FLP不可能定理学习笔记
  3. 【管理知多少】中文“其他”、英文“OTHER”、日文“その他”.......
  4. 全球及中国睡眠呼吸面罩行业研究及十四五规划分析报告
  5. 微信h5 Native下单API
  6. 物理引擎学习05-GJK和EPA计算穿透向量
  7. 小米也要造车了?为何手机厂商也爱造车?
  8. Java运行时环境初始化出现错误
  9. vue项目中修改页面logo和标题
  10. 【已解决】Microsoft Visual C++ Redistributable is not installed