1. 查找给定的数
【问题描述】
在n个数中查找给定的数e
【输入形式】
第一行包括两个整数n和e,第二行为n个整数,都以空格分开
【输出形式】
如果存在e,输出第一个e的位序;不过不存在e,输出0
【样例1输入】
10 33
12 31 11 26 12 2 19 33 43 33
【样例1输出】
8
【样例2输入】
10 3
12 31 11 26 12 2 19 33 43 28
【样例2输出】
0
参考代码:
#include<stdio.h>
int main(){
int n,e,i,j;
int t=0;
scanf("%d%d",&n,&e);
int *a=malloc(n*sizeof(int));//分配数组的地址空间
for(i=0;i<n;i++){
scanf("%d",&a[i]);
}
for(j=0;j<n;j++){
if(a[j]==e){
t=1;
printf("%d",j+1);
break;
}
}
if(t==0)
printf("%d",t);
return 0;
}
2. 求最大的数
【问题描述】
求n个数中最大的数
【输入形式】
第一行包括1个整数n,第二行为n个整数,以空格分开
【输出形式】
最大的数
【样例输入】
10
18 21 11 26 12 2 9 33 43 28
【样例输出】
43
参考代码:
#include<stdio.h>
int main(){
int n,i;
scanf("%d",&n);
int *a=malloc(n*sizeof(int));
for(i=0;i<n;i++){
scanf("%d",&a[i]);
}
int max=a[0];
for(i=0;i<n;i++){
if(a[i]>=max)
max=a[i];
}
printf("%d",max);
return 0;
}
3. 将两个按值有序的非空数组合并为一个按值有序的数组
【问题描述】
两个非递减组的并集,例如将数组1->2->2->3 和 2->3->5 并为 1->2->3->5。
【输入形式】
输入3行,第1行输入2个整数,以空格分隔,分别代表两个数组的元素个数。
第2行为第一个数组的各元素值,以空格分隔。
第3行为第二个数组的各元素值,以空格分隔。
【输出形式】
合并好的数组,去掉重复元素递增排列,值与值之间以空格分隔。
【样例输入】
4 7
4 7 10 34
1 4 6 29 34 34 52
【样例输出】
1 4 6 7 10 29 34 52【样例说明】
【评分标准】
要使用数组实现,否则不能得分。
参考代码:
#include<stdio.h>
#include<stdlib.h>
//求有多少个重复元素
int count(int a[],int b[],int m ,int n){
int i,j;
int t=0;
for(i=0;i<n;i++){
for(j=0;j<m;j++){
if(a[j]==b[i]){
t++;
continue;
}
}
}
if(t==n*m)
t=m+n-1;//两个数组的数均一样
return t;
}
int main(){
int m,n,i,j,k,w;
scanf("%d%d",&m,&n);
int t=m;
int *a=malloc(m*sizeof(int));
int *b=malloc(n*sizeof(int));
for(i=0;i<m;i++){
scanf("%d",&a[i]);
}
for(i=0;i<n;i++){
scanf("%d",&b[i]);
}
int q=m+n-count(a,b,m,n);
int c[q];
for(i=0;i<m;i++){
c[i]=a[i];
}
for(i=0;i<n;i++){
k=0;
for(j=0;j<m;j++){
if(c[j]==b[i]){
k=1;
continue;
}
}
if(k==0){
c[t]=b[i];
t++;
}
}
//冒泡排序
for(i=0;i<q;i++)
for(j=0;j<q-i;j++)
if(c[j]>c[j+1]){
w=c[j];
c[j]=c[j+1];
c[j+1]=w;
}
for(i=0;i<q;i++){
printf("%d ",c[i]);
}
return 0;
}