数组及其应用

第1关:折半查找

100

  • 任务要求
  • 参考答案
  • 评论170

任务描述

本关任务:由N个有序整数组成的数列已放在一维数组中,给定程序的功能是:利用折半查找法查找整数m在数组中的位置。若找到,返回其下标值,否则返回-1

相关知识

相关知识略

编程要求

请仔细阅读右侧代码,结合相关知识,在Begin-End区域内进行代码补充,完成编写折半查找的小程序。

测试说明

平台会对你编写的代码进行测试:

测试输入: 5

预期输出: -5 4 9 15 28 45 66 89 100 180 Not be found!

测试输入: 9

预期输出: -5 4 9 15 28 45 66 89 100 180 m=9,index=2


开始你的任务吧,祝你成功!

#include <stdio.h>
#define   N   10
int main()
{  
	int i, a[N]={-5,4,9,15,28,45,66,89,100,180 }, k=-1, m;
	int low=0, high=N-1, mid;

	for(i=0;i<N;i++)  
		printf("%d ", a[i]);
	printf("\n");
	
	scanf("%d",&m);
	while(low <= high)
	{  
		mid = (low + high) / 2;
		if(m < a[mid])
			high = mid-1;
			
		/***** 以下一行有错误 *****/
		else if(m > a[mid])     low=mid+1;
		
		
		/***** 以下一行有错误 *****/
		else  {k=mid;break;}   
	}
	
	if(k>=0)  
		printf("m=%d,index=%d\n",m,k);
	else      
		printf("Not be found!\n");
	
	return 0;
}

第2关:二位数组操作

200

  • 任务要求
  • 参考答案
  • 评论170

任务描述

本关任务:输入一个N×N的二维数组。编写程序将数组左下半三角元素的值全部置成0。 例如: a数组元素原来的值为: 1 2 3 4 5 6 7 8 9 处理后a数组中元素的值应为: 0 2 3 0 0 6 0 0 0

输入: 第一行为一个整数N代表数组维数。 第二行开始为NxN维数组的数据。

输出: 数组处理后的结果。

相关知识

相关知识略

编程要求

请仔细阅读右侧代码,结合相关知识,在Begin-End区域内进行代码补充,完成编写二位数组操作的小程序。

测试说明

平台会对你编写的代码进行测试:

测试输入: 3 1 2 3 4 5 6 7 8 9

预期输出: 0 2 3 0 0 6 0 0 0

提示: 二维数组的数据输入方法为:

 
  1. int a[N][N];
  2. for(i=0; i<N; i++)// 控制行数
  3. for(j=0; j<N; j++) // 控制列数
  4. scanf("%d", &a[i][j]);

开始你的任务吧,祝你成功!

/********** Begin **********/
#include<stdio.h>
int main(){
    int n,i,j;
    scanf("%d",&n);
    int a[n][n];
    for(i=0;i<n;i++){
        for(j=0;j<n;j++){
            scanf("%d",&a[i][j]);
        }
    }
    for(i=0;i<n;i++){
        for(j=0;j<=i;j++){
            a[i][j]=0;
        }
    }
    for(i=0;i<n;i++){
        for(j=0;j<n;j++){
            printf("%d ",a[i][j]);
        }
        printf("\n");
    }
}
/********** End **********/

第3关:二维数组的展开

100

  • 任务要求
  • 参考答案
  • 评论170

任务描述

本关任务:编写程序,功能是将MN列的二维数组中的字符数据按列的顺序依次放到一个字符串(一维数组)中。 例如,二维数组中的数据为: SSSS YYYY XXXX YYYY 则字符串中的内容应是:SYXYSYXYSYXYSYXY

输入: 第一行为两个整数MN代表数组MN列大小。 第二行开始为输入的二维数组数据。

输出: 处理后输出的一维数组。

相关知识

相关知识略

编程要求

请仔细阅读右侧代码,结合相关知识,在Begin-End区域内进行代码补充,完成编写二维数组的展开的小程序。

测试说明

平台会对你编写的代码进行测试:

测试输入: 4 4 SSSS YYYY XXXX YYYY 预期输出: SYXYSYXYSYXYSYXY


开始你的任务吧,祝你成功!

/********** Begin **********/
#include<stdio.h>
int main(){
    int m,n,i,j;
    scanf("%d %d",&m,&n);
    char a[m][n];
    getchar();//因为scanf输入的有enter键(就是“\n”换行键),而使用getchar会吸取enter键,所以先用这个从缓冲区中吸取这个enter键
    for(i=0;i<m;i++){
        for(j=0;j<n;j++){
            a[i][j]=getchar();//这是从键盘读取字符
        }
        getchar();//这是从缓冲区里吸取字符读出来
    }
    for(j=0;j<n;j++){
        for(i=0;i<m;i++){
            putchar(a[i][j]);
        }
    }
}
/********** End **********/

第4关:数组元素交换

200

  • 任务要求
  • 参考答案
  • 评论170

任务描述

本关任务:有一个3*4矩阵,找出每行中最大的元素并与第1列元素交换。具体要求如下: 1. 使用二维数组存放该3*4矩阵 2. 为二维数组输入数据。 3. 输出原矩阵并和处理后的矩阵进行比较。

输入: 第一行为两个整数,表示3x4的矩阵。 第二行开始为矩阵赋值。

输出: 第一行输出提示"原矩阵:"。 第二行开始输出原矩阵数据。 接下来一行输出提示"处理后:"。 接下来一行开始输出处理后的矩阵数据。

相关知识

相关知识略

编程要求

请仔细阅读右侧代码,结合相关知识,在Begin-End区域内进行代码补充,完成编写数组元素交换的小程序。

测试说明

平台会对你编写的代码进行测试:

测试输入: 3 4 1 2 3 4 5 6 7 8 9 10 11 12

预期输出: 原矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 处理后: 4 2 3 1 8 6 7 5 12 10 11 9


开始你的任务吧,祝你成功!

/********** Begin **********/
#include<stdio.h>
int main(){
    int i,j,n,m,t,k,isPrime;
    scanf("%d %d",&n,&m);
    int a[n][m];
    for(i=0;i<n;i++){
        for(j=0;j<m;j++){
            scanf("%d",&a[i][j]);
        }
    }
    printf("原矩阵:\n");
    for(i=0;i<n;i++){
        for(j=0;j<m;j++){
            printf("%d ",a[i][j]);
        }
        printf("\n");
    }
    for(i=0;i<n;i++){
        k=0;
        isPrime=1;
        t=a[i][0];
        for(j=1;j<m;j++){
            if(a[i][j]>a[i][k]){
                k=j;
                a[i][0]=a[i][k];
                isPrime=0;
            }
    }
    if(isPrime==0)
        a[i][k]=t;
}
    printf("处理后:\n");
    for(i=0;i<n;i++){
        for(j=0;j<m;j++){
            printf("%d ",a[i][j]);
        }
        printf("\n");
    }
}
/********** End **********/

第5关:幻方

300

  • 任务要求
  • 参考答案
  • 评论170

任务描述

幻方(Magic Square)是一种将数字安排在正方形格子中,使每行、列和对角线上的数字和都相等的方法。 幻方也是一种中国传统游戏。旧时在官府、学堂多见。它是将从一到若干个连续的自然数排成纵横各为若干个数的正方形,使在同一行、同一列和同一对角线上的几个数的和都相等。例如有如下所示的一个三阶幻方,幻和为15

492
357
816

本关任务:编写程序判定N×N(规定N为奇数,且N<20)的矩阵是否是"幻方",(N×N的二维数组各元素的值由用户在程序运行时输入) "幻方"的判定条件是:矩阵每行、每列、主对角线及反对角线上元素之和都相等。

输入: 第一行为一个整数,代表矩阵维数N。 第二行开始为矩阵输入数据。

输出: 判断结果,若是幻方则输出Yes不是则输出No

相关知识

相关知识略

编程要求

请仔细阅读右侧代码,结合相关知识,在Begin-End区域内进行代码补充,完成编写幻方的小程序。

测试说明

平台会对你编写的代码进行测试:

测试输入: 3 4 9 2 3 5 7 8 1 6

预期输出: Yes


开始你的任务吧,祝你成功!

/********** Begin **********/
#include<stdio.h>
int main()
{
    int n,i,j,sum=0,num=0,isPrime=1;
    scanf("%d",&n);
    int a[n][n];
    for(i=0;i<n;i++){
        for(j=0;j<n;j++){
            scanf("%d",&a[i][j]);
        }
    }
    //求行
    for(i=0;i<n;i++){
        sum+=a[0][i];
    }//先拿第一行作为该数的比较
    for(i=1;i<n;i++){
        num=0;
        for(j=0;j<n;j++){
            num+=a[i][j];
        }
        if(num!=sum){
            isPrime=0;
            goto out;//是直接跳到out执行
        }
    }
    //求列
    for(j=0;j<n;j++){
        num=0;
        for(i=0;i<n;i++){
            num+=a[i][j];
        }
        if(num!=sum){
            isPrime=0;
            goto out;
        }
    }
    num=0;
    for(i=0;i<n;i++){
        num+=a[i][i];//求对角线
    }
    if(num!=sum) 
        isPrime=0;
        goto out;
    num=0;
    for(i=0;i<n;i++){
        num+=a[i][n-1-i];//求反对角线
    }
    if(num!=sum)
        isPrime=0;
out:
    if(isPrime) 
        printf("Yes");
    else {printf("No");}
}
/********** End **********/

  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值