第1关:排序问题
任务描述
本关任务:将十个数进行从大到小的顺序进行排列。
相关知识(略)
编程要求
根据提示,在右侧编辑器Begin-End
处补充代码。 输入 输入十个整数。
输出 以从大到小的顺序输出这个十个数。
测试说明
样例输入: 1 2 3 4 5 6 7 8 9 10
样例输出: 10 9 8 7 6 5 4 3 2 1
开始你的任务吧,祝你成功!
#include<stdio.h>
int main(void)
{
/*********Begin*********/
int i,j,temp=0;
int a[10];
for(i=0;i<10;i++)
scanf("%d",&a[i]);
for(i=1;i<10;i++)
for(j=0;j<9;j++)
if(a[j]<a[j+1]){
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
for(i=0;i<10;i++)
printf("%d ",a[i]);
/*********End**********/
return 0;
}
第2关:查找整数
任务描述
题目描述:给出一个包含n
个整数的数列,问整数a
在数列中的第一次出现是第几个。
相关知识(略)
编程要求
根据提示,在右侧编辑器Begin-End
处补充代码。 输入 第一行包含一个整数n
。 第二行包含n
个非负整数,为给定的数列,数列中的每个数都不大于10000
。 第三行包含一个整数a
,为待查找的数。 输出 如果a
在数列中出现了,输出它第一次出现的位置(位置从1
开始编号),否则输出-1
。
测试说明
样例输入: 6
1 9 4 8 3 9
9
样例输出: 2
提示: 数据规模与约定。 1 <= n <= 1000
开始你的任务吧,祝你成功!
#include<stdio.h>
int main(void)
{
/*********Begin*********/
int n,i,a,sum=0;
int arr[1000];
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d",&arr[i]);
scanf("%d",&a);
for(i=0;i<n;i++){
if(arr[i]==a) {
sum=i+1;
goto loop;
}
}
loop: if(sum==0) printf("-1");
else printf("%d",sum);
/*********End**********/
return 0;
}
第3关:计算数组中元素的最大值及其所在的行列下标值
任务描述
题目描述:按如下函数原型编程从键盘输入一个m
行n
列的二维数组,然后计算数组中元素的最大值及其所在的行列下标值。其中m
和n
的值由用户键盘输入。已知m
和n
的值都不超过10
。
相关知识(略)
输入
输入数组大小:"%d,%d"
下面输入数组中元素。
输出
输出格式: 数组大小输入提示信息:"Input m, n:"
数组元素输入提示信息:"Input %d*%d array: "
输出格式:"max=%d, row=%d, col=%d"
样例输入
5,5
1 2 3 4 5
4 5 6 100 2
3 2 1 5 6
1 2 3 5 4
3 5 6 4 8
样例输出
Input m, n:Input 5*5 array:
max=100, row=2, col=4
开始你的任务吧,祝你成功!
编程要求
根据提示,在右侧编辑器Begin-End
处补充代码。
测试说明
平台会对您的代码进行运行测试,如果实际输出与预期输出相同,则算通关。
#include<stdio.h>
int main(void)
{
/*********Begin*********/
int m,n;
int a[5][5];
int i,j,max=0,row=0,col=0;
scanf("%d,%d",&m,&n);
for(i=0;i<m;i++)
for(j=0;j<n;j++)
scanf("%d",&a[i][j]);
max=a[0][0];
for(i=0;i<m;i++)
for(j=0;j<n;j++)
if(max<=a[i][j]){
max=a[i][j];
row=i+1;
col=j+1;
}
printf("Input m, n:");
printf("Input %d*%d array:\n",m,n);
printf("max=%d, row=%d, col=%d",max,row,col);
/*********End**********/
return 0;
}
第4关:二分查找
任务描述
题目描述:将n
个从小到大排序的整数(n<1000000
)从1~n
进行编号,并一个待查找的整数m
,请使用二分法进行查找。 ####相关知识(略) ####编程要求 根据提示,在右侧编辑器Begin-End
处补充代码。 输入 输入包括3
行,第一行为整数n
,第二行包括n
个整数,以空格分隔,第三行为整数m
。 输出 如果能够在序列中找到整数m
,则输出编号(如果存在多个编号,返回编号最小的),如果不存在,则输出None
。
测试说明
样例输入: 10
1 2 4 5 6 7 8 9 10 11
10
样例输出: 9
开始你的任务吧,祝你成功!
#include <stdio.h>
int a[1000005],n,t;
int BS(){
int l=0,r=n-1;
while(l<=r){
int m=(l+r)>>1;
if(t<a[m])
r=m-1;
else if(t>a[m])
l=m+1;
else if(a[m-1]<t)
return m;
else r=m-1;
}
return -1;
}
int main(){
while(~scanf("%d",&n)){
for(int i=0;i<n;i++)
scanf("%d",&a[i]);
scanf("%d",&t);
if(a[0]==t)
printf("1");
else{
int f=BS();
if(f!=-1){
printf("%d",f+1);
}
else
printf("None");
}}
return 0;
}
第5关:鞍点
任务描述
题目描述:找出具有m
行n
列二维数组Array
的“鞍点”,即该位置上的元素在该行上最大,在该列上最小,其中1<=m,n<=10
。
相关知识(略)
编程要求
输入
输入数据有多行,第一行有两个数m
和n
,下面有m
行,每行有n
个数。
输出
按下列格式输出鞍点: Array[i][j]=x
其中x
代表鞍点,i
和j
为鞍点所在的数组行和列下标,我们规定数组下标从0
开始。 一个二维数组并不一定存在鞍点,此时请输出None
我们保证不会出现两个鞍点的情况,比如: 3 3
1 2 3
1 2 3
3 6 8
测试说明
平台会对您的代码进行运行测试,如果实际输出与预期输出相同,则算通关。
样例输入:
3 3
1 2 3
4 5 6
7 8 9
样例输出:
Array[0][2]=3
开始你的任务吧,祝你成功!
#define N 10
#include <stdio.h>
int Maxcol(int a[][N],int n,int row){
int i,maxcol=0;
for(i=1;i<n;i++)
if (a[row][i]>a[row][maxcol]) maxcol=i;
return maxcol;
}
int Minrow(int a[][N],int m,int col){
int i,minrow=0;
for(i=1;i<m;i++)
if (a[i][col]<a[minrow][col]) minrow=i;
return minrow;
}
int main(){
int m,n,i,j;
int maxcol,minrow;
int a[N][N];
scanf("%d%d",&m,&n);
for(i=0;i<m;i++) for(j=0;j<n;j++)
scanf("%d",&a[i][j]);
for(i=0;i<m;i++){
maxcol=Maxcol(a,n,i);
minrow=Minrow(a,m,maxcol);
if (i==minrow){
printf("Array[%d][%d]=%d",i,maxcol,a[i][maxcol]);
break;
}
}
if(i>=m) printf("None");
}
第6关:删除最大值
任务描述
题目描述:输入10
个互不相同的整数并保存在数组中,找到该最大元素并删除它,输出删除后的数组
相关知识(略)
编程要求
请仔细阅读右侧代码,结合相关知识,在Begin-End
区域内进行代码补充,完成编写删除最大值的小程序。
输入
输入10
个互不相同整数
输出
输出删除最大元素后的数组
测试说明
平台会对您的代码进行运行测试,如果实际输出与预期输出相同,则算通关。
样例输入:
1 2 3 4 5 6 7 8 9 0
样例输出:
1 2 3 4 5 6 7 8 0
开始你的任务吧,祝你成功!
#include"stdio.h"
#define N 10
void del(int d[],int i,int n)
{
for(;i<n-1;i++)
{
d[i]=d[i+1];
}
}
int main()
{
int a[N],i,max=0;
for(i=0;i<=N;i++){
scanf("%d",&a[i]);}
for(i=1;i<=N;i++){
if(a[i]>a[max])
max=i;
}
del(a,max,10);
for(i=0;i<N-1;i++)
{
printf("%d",a[i]);
putchar(' ');
}
return 0;
}
第7关:杨辉三角
任务描述
题目描述:还记得中学时候学过的杨辉三角吗?具体的定义这里不再描述,你可以参考以下的图形: 1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
相关知识(略)
编程要求
请仔细阅读右侧代码,结合相关知识,在Begin-End
区域内进行代码补充,完成编写杨辉三角的小程序。
测试说明
平台会对您的代码进行运行测试,如果实际输出与预期输出相同,则算通关。
输出
打印出杨辉三角图形的10
行。格式见题目描述部分。每个整数后面接一个空格来分隔开整数
开始你的任务吧,祝你成功!
#include<stdio.h>
int main(void)
{
/*********Begin*********/
int a[10][10];
int i,j;
for(i=0;i<10;i++)
{
for(j=0;j<=i;j++)
{
if(j==0||j==i)
a[i][j]=1;
else a[i][j]=a[i-1][j-1]+a[i-1][j];
}
}
for(i=0;i<10;i++)
{
for(j=0;j<=i;j++)
{
printf("%d",a[i][j]);
if(j!=i) printf(" ");
}
printf("\n");
}
/*********End**********/
return 0;
}