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;
}
求数组的最大值和次大值。
#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; }
给定一个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; }
给定一个含有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; }
- 给定含有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语言强化——数组的主要内容,如果未能解决你的问题,请参考以下文章