C语言强化——数组

Posted mered1th

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言强化——数组相关的知识,希望对你有一定的参考价值。

打印九九乘法表

#include<stdio.h>

int main() {
    int num = 1;
    for (int i = 1;i <= 9;++i) {
        for (int j = 1;j <= 9;++j) {
            printf("%d * %d = %d  ", j, i, i*j);
            if (j == num) {  
                ++num;
                break;
            }
        }
        printf("\\n");
    }
    return 0;
}

技术图片

打印图形:

#include<stdio.h>

int main() {
    int i, j, k;
    for (i = 0;i < 4;++i) {
        for (j = 4;j > i;j--) {
            printf(" ");
        }
        for (k = -1;k < i;k++) {
            if (k != i - 1) printf("* ");
            else printf("*");
        }
        printf("\\n");
    }
    for (i = 0;i < 5;++i) {
        if (i != 4) printf("* ");
        else printf("*");
    }
    printf("\\n");
    for (i = 0;i < 4;i++) {
        for (j = -1;j < i;j++) {
            printf(" ");
        }
        for (k = i;k < 4;k++) {
            if (k != 4) printf("* ");
            else printf("*");
        }
        printf("\\n");
    }
    return 0;
}

技术图片

#include<stdio.h>

int main() {
    int i, j, k;
    //前四行
    for (i = 0;i < 4;++i) {
        for (j = 4;j > i;j--) {
            printf(" ");
        }
        for (k = -1;k < 2 * i;k++) {
            if (k == 2 * i - 1 || k == -1) printf("*");
            else printf(" ");
        }
        printf("\\n");
    }
    //第五行
    for (i = 0;i < 9;++i) {
        if (i == 8 || i == 0) printf("*");
        else printf(" ");
    }
    printf("\\n");
    //第六到八行
    for (i = 0;i < 3;++i) {
        for (j = -1;j < i;j++) {
            printf(" ");
        }
        printf("*");
        for (k = 0;k < 5 - 2 * i;++k) {
            printf(" ");
        }
        printf("*");
        printf("\\n");
    }
    //最后行
    for (i = 0;i < 4;++i) {
        printf(" ");
    }
    printf("*\\n");
    return 0;
}

技术图片

#include<stdio.h>   

int main() {
    //前三行
    for (int i = 0;i < 3;++i) {
        for (int j = i;j < 3;++j) {
            printf(" ");
        }
        for (int j = 0;j < i + 2;++j) {
            printf("* ");
        }
        for (int j = 6 - 2 * i;j > 0;j--) {
            printf(" ");
        }
        for (int j = 0;j < i + 2;++j) {
            if(j!=i+1) printf("* ");
            else printf("*");
        }
        printf("\\n");
    }
    //第四行
    for (int i = 0;i < 10;++i) {
        if(i!=9) printf("* ");
        else printf("*");
    }
    printf("\\n");
    //第5行到第13行
    for (int i = 1;i <= 9;++i) {
        for (int j = 0;j < i;++j) {
            printf(" ");
        }
        for (int j = 9 - (i - 1);j > 0;j--) {
            printf("* ");
        }
        printf("\\n");
    }

    return 0;
}

技术图片

4.
(1)求两个有序数组的公共元素

#include<stdio.h>

void func1(int a[], int b[], int size_a, int size_b) {
    int i = 0, j = 0;
    while (i < size_a && j < size_b) {
        if (a[i] == b[j]) {
            printf("%d ", a[i]);
            ++i;
            ++j;
        }
        else {
            a[i] > b[j] ? j++ : i++;
        }
    }
    printf("\\n");
}


int main() {
    int a[5] = { 1,2,3,8,9 };
    int b[6] = { 1,3,5,8,9,11 };
    func1(a, b, 5, 6);
    return 0;
}

技术图片

(3)求n个有序数组的公共元素。

#include<iostream>
#include<algorithm>
#include<vector>

using namespace std;

vector<int> compare(vector<int> &a, vector<int> &b) {
    int i = 0, j = 0;
    int size_a = a.size(), size_b = b.size();
    vector<int> res;
    while (i < size_a && j < size_b) {
        if (a[i] == b[j]) {
            res.push_back(a[i]);
            ++i;
            ++j;
        }
        else {
            a[i] > b[j] ? j++ : i++;
        }
    }
    return res;
}

void func(vector<vector<int>> &v) {
    int row = v.size();  //行数
    vector<int> ans = v[0];
    int n = row - 1, i = 1;
    while(n--) {   //循环row-1次
        ans = compare(ans, v[i]);
        i++;
    }
    for (auto i : ans) {
        cout << i << " ";
    }
}

int main() {
    vector<vector<int>> v = { {1,2,3,4},{1,2,3},{2,3},{2} };
    func(v);

    return 0;
}

技术图片

  1. 求数组的最大值和次大值。

    #include<stdio.h>
    
    void bubble_sort(int a[], int n)
    {
     int i, j, temp;
     for (j = 0; j < 2; j++) { //两次冒泡
         for (i = 0; i < n - 1 - j; i++)
         {
             if (a[i] > a[i + 1])
             {
                 temp = a[i];
                 a[i] = a[i + 1];
                 a[i + 1] = temp;
             }
         }
     }
     printf("最大值:%d \\n次大值:%d\\n", a[n - 1], a[n - 2]);
    }
    
    int main() {
     int a[10] = { 2,5,1,-9,45,6,-2,0,50,10 };
     bubble_sort(a, 10);
     return 0;
    }
    

技术图片

  1. 给定一个n个整型元素的数组a,其中有一个元素出现次数超过n / 2,求这个元素。

    #include<stdio.h>
    
    void func(int a[], int n) {
     int res = a[0], num = 1;
     for (int i = 0;i < n;i++) {
         if (a[i] != a[i + 1]) {
             --num;
             if (num == 0) {
                 res = a[i + 1];
                 num = 1;
             }
         }
         else {
             ++num;
         }
     }
     for (int i = 0;i < n;i++) {
         if (a[i] == res) {
             ++num;
         }
     }
     if (num > (n / 2)) printf("结果为:%d\\n", res);
     else printf("不存在!\\n");
    }
    
    int main() {
     int a[10] = { 1,1,1,9,8,1,-9,2,1,1 };
     func(a, 10);
     return 0;
    }
    

技术图片

  1. 给定一个含有n个元素的整型数组,找出数组中的两个元素x和y,使得abs(x - y)值最小

    #include<iostream>
    #include<vector>
    #include<algorithm>
    using namespace std;
    const int INF = 1000000000;
    
    int main() {
     vector<int> v= { -1,-2,-50,30,2,300,7,9,10,15 };
     sort(v.begin(), v.end());
     int minLen = INF, x, y;
     for (auto i = 0;i < v.size()-1;++i) {
         if (abs(v[i + 1] - v[i]) < minLen) {
             minLen = abs(v[i + 1] - v[i]);
             x = v[i];
             y = v[i + 1];
         }
     }
     printf("%d %d\\n", x, y);
     return 0;
    }
    

技术图片

  1. 给定含有1001个元素的数组,其中存放了1-1000之内的整数,只有一个整数是重复的,请找出这个数
    A1 + … + A1001 – (1 + …+ 1000)
void func(int a[]) {
    int sum = 0;
    for (int i = 0;i < 1001;i++) {
        sum += a[i];
    }
    for (int i = 1;i <= 1000;i++) {
        sum -= i;
    }
    printf("结果为:%d\\n", sum);
}

以上是关于C语言强化——数组的主要内容,如果未能解决你的问题,请参考以下文章

C语言提高内容目录

强化学习技巧五:numba提速python程序

C语言代码片段

c语言对二维数组的某一行赋值 如u8 a[20][20]; 仅对a[10]这一行赋值

C++强化 | 07 二维数组

解释'空'C数组(int a = {};)