Educoder-程序設計基礎:一維數組和二維數組


第1關:查找整數

​ 題目描述:給出一個包含n個整數的數列,問整數a在數列中的第一次出現的位置是多少(從1開始)

#include<stdio.h>
int main(void)
{
    /*********Begin*********/
    int a[1000];
    int i, n, b, p;
    scanf("%d", &n);
    for (i = 0; i < n; i++)
    {
        scanf("%d", &a[i]);
    }
    scanf("%d", &b);
    for (i = 0; i < n; i++)
    {
        if (a[i] == b)
        {
            p = i + 1;
            break;
        }
    }
    if (n == i)
        printf("-1");
    else
        printf("%d", p);
    /*********End**********/
    return 0;
}

第2關:簡單加密

​ 本關任務:在網絡傳遞數據過程中為安全考慮要為數據進行加密 ,假定數據是四位的整數,加密規則如下:每位數字都加上5,然后用和除以10的余數代替該數字,再將第一位和第四位交換,第二位和第三位交換。用戶輸入一個四位的整數,輸出加密后的密文

#include <stdio.h>
int main() {
    /*********begin *******/
    int a[5], i, j, m, n;
    scanf("%d", &m);
    for (i = 0; i <= 3; i++)
    {
        a[i] = m % 10;      //分離四個數
        m = m / 10;
        a[i] = (a[i] + 5) % 10;
    }

    n = a[0] * 1000 + a[1] * 100 + a[2] * 10 + a[3];
    printf("%d", n);
    /*********end *******/
    return 0;
}

第3關:排序問題

​ 本關任務:將十個數進行從大到小的順序進行排列

#include<stdio.h>
int main(void)
{
    /*********Begin*********/
    int a[100], i, j, t;
    for (i = 0; i < 10; i++) {
        scanf("%d", &a[i]);
    }
    for (i = 0; i < 9; i++) {   //最后一位在第9位已經比完了
        for (j = 0; j < 9; j++) {
            if (a[j] < a[j + 1]) {
                t = a[j];
                a[j] = a[j + 1];
                a[j + 1] = t;
            }
        }
    }
    for (i = 0; i < 10; i++) {
        printf("%d", a[i]);
    }
    /*********End**********/
    return 0;
}

第4關:二分查找

輸入 輸入包括3行,第一行為整數n(元素個數),第二行包括n個整數(數組元素),以空格分隔,第三行為整數m(要查找的元素)。

輸出 如果能夠在序列中找到整數m,則輸出編號(如果存在多個編號,返回編號最小的),如果不存在,則輸出None

#include<stdio.h>
int main() {
	int a[100], key, index = -1, high, low, mid, i, m;
	scanf("%d", &m);
	for (i = 0; i < m; i++) {
		scanf("%d", &a[i]);
	}
	scanf("%d", &key);
	low = 0; high = key-1;
	while (low <= high) {	//目的是防止數組中沒有查找的元素,如果沒有需要的元素最終low會大於high
		mid = (low + high) / 2;
		if (a[mid] == key) {
			index = mid; break;
		}
		else if (a[mid] <= key) {
			low = mid + 1;		//因為mid已經比較過所以+1
		}
		else if (a[mid] > key) {
			high = mid - 1;		//同上
		}
		else {
			index = -1; break;
		}
	}
	if (index == -1) {
		printf("NULL");
	}
	else
		printf("%d", index);

	return 0;
}

參考

懶貓老師-C語言-二分查找(折半查找)_嗶哩嗶哩_bilibili

C語言二分查找法 - 尼古拉斯寶莉 - 博客園 (cnblogs.com)

第5關:計算數組中元素的最大值及其所在的行列下標值

​ 題目描述:按如下函數原型編程從鍵盤輸入一個mn列的二維數組,然后計算數組中元素的最大值及其所在的行列下標值。其中mn的值由用戶鍵盤輸入。已知mn的值都不超過10

#include<stdio.h>
int main(void)
{
    /*********Begin*********/
    int a[10][10], m, n, max, i, j, maxi = 0, maxj = 0;
    printf("Input m, n:");
    scanf("%d,%d", &m, &n);
    printf("Input %d*%d array:\n", 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 (a[i][j] > max)
            {
                max = a[i][j];
                maxi = i;
                maxj = j;

            }
    }
    printf("max=%d, row=%d, col=%d", max, maxi + 1, maxj + 1);
    /*********End**********/
    return 0;
}

第6關:鞍點

​ 題目描述:找出具有mn列二維數組Array的“鞍點”,即該位置上的元素在該行上最大,在該列上最小,其中1<=m,n<=10

#include<stdio.h>
int main(void)
{
    /*********Begin*********/
    int a[10][10], m, n, i, j, k, max, min, flag = 1;
    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++)
    {
        max = a[i][0];		//比較行
        k = 0;
        for (j = 1; j < n; j++)

            if (a[i][j] > max)
            {
                max = a[i][j];
                k = j;
            }

        min = a[0][k];		//比較列
        for (j = 1; j < m; j++)

            if (a[j][k] < min)
                min = a[j][k];
        if (max == min)
        {
            printf("Array[%d][%d]=%d", i, k, max);
            flag += 1;
        }


    }
    if (flag == 0)printf("None");
    /*********End**********/
    return 0;
}

第7關:刪除最大值

​ 題目描述:輸入10個互不相同的整數並保存在數組中,找到該最大元素並刪除它,輸出刪除后的數組

#include<stdio.h>
#define m 10	//定義m=10
int main(void)
{
    int a[m], n, b, max;
    for (n = 0; n < 10; n++)
    {
        scanf("%d", &a[n]);
    }
    max = a[0];
    for (n = 0; n < 10; n++)
    {
        if (max < a[n])
        {
            max = a[n];
        }
    }
    for (n = 0; n < 10; n++)
    {
        if (a[n] == max)
        {
            if (n == 9)
            {
                break;
            }
            for (b = n; b < 9; b++)
            {
                a[b] = a[b + 1];	//將最大值移到最后
            }
            break;
        }
    }
    for (b = 0; b < 9; b++) {
        printf("%d ", a[b]);	//最后一個值不輸出
    }
    return 0;
}

第8關:打印楊輝三角

​ 楊輝三角是一個無限對稱的數字金字塔,從頂部的單個1開始,下面一行中的每個數字都是上面兩個數字的和

#include<stdio.h>
int main(void)
{
    /*********Begin*********/
    int a[10][10], i, j;
    for (i = 0; i < 10; i++)

        a[i][0] = a[i][i] = 1;

    for (i = 2; i < 10; i++)

        for (j = 1; j < i; j++)

            a[i][j] = a[i - 1][j] + a[i - 1][j - 1];


    for (i = 0; i < 10; i++)
    {
        for (j = 0; j <= i; j++)

            printf("%4d", a[i][j]);		//%4d意思是空格加數字
        printf("\n");

    }

    /*********End**********/
    return 0;
}

!第9關:百燈判熄

​ 本關任務:有100盞燈,編號為1~100,分別有100個開關進行控制,開始時燈全是打開的,然后進行如下的操作:首先將編號凡是1的倍數的開關進行反向操作,然后再將是2的倍數的開關進行反向操作,依次類推直到最后對100的倍數的開關進行反向操作。求最后熄滅狀態的燈的編號及總數

//當時抄的還沒搞懂
#include "stdio.h"
void main()
{
    /************Begin************/
    int a[101], i, lamp, count = 0;
    for (lamp = 0; lamp <= 100; lamp++)
    {
        a[lamp] = 0;
    }
    for (i = 1; i <= 100; i++)
    {
        for (lamp = i; lamp <= 100; lamp += i)
        {
            a[lamp]++;
        }
    }
    printf("熄滅狀態的燈的編號是:\n");
    for (i = 1; i <= 100; i++)
    {
        if (a[i] % 2 == 1)
        {
            printf("%4d", i);
            count++;
        }
    }
    printf("\n共有%d盞燈是滅的", count);
    /************End************/
}

第10關:青年歌手大獎賽_評委會打分

​ 本關任務:青年歌手大獎賽中,評委會給參賽選手打分。選手得分規則為去掉一個最高分和一個最低分,然后計算平均得分,請編程輸出某選手的得分

#include<stdio.h>
int main() {
    double n, a[100], max, min, sum;
    int i;
    while (~scanf("%lf", &n))	//意思是從鍵盤一直輸入
    {
        if (n == 0)break;
        sum = 0;
        for (i = 0; i < n; i++)
            scanf("%lf", &a[i]);
        max = a[0]; min = a[0];
        for (i = 0; i < n; i++)
        {
            if (max < a[i])
                max = a[i];
            if (min > a[i])
                min = a[i];
        }
        for (i = 0; i < n; i++)
            if (a[i] != max && a[i] != min)
                sum += a[i];
        printf("%.2lf\n", sum / (n - 2));
    }
    return 0;
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM