Tips:代码不一定最优解,但一般能懂(可能吧),用的是VS2022。
1.数组指定位置插入和删除
代码
#include <stdio.h>
int main()
{
int a[11] = { 1,2,3,4,5,6,7,8,9,0 };
int x1, n1, n2;
scanf("%d %d", &x1, &n1);
scanf("%d", &n2);
//打印原数组
int sz = sizeof(a) / sizeof(a[0]);
for (int i = 0; i < sz; i++)
{
printf("%5d", a[i]);
if (a[i] == 0)
{
break;
}
}
printf("\n");
//打印插入数组
if (n1 < 11)
{
for (int i = sz; i >= n1; i--)
{
a[i + 1] = a[i];
}
a[n1] = x1;
}
else
{
a[10] = x1;
}
sz = sizeof(a) / sizeof(a[0]);
for (int i = 0; i < sz; i++)
{
printf("%5d", a[i]);
}
printf("\n");
//打印删除数组
if (n2 < 11)
{
for (int i = n2; i <sz; i++)
{
a[i] = a[i+1];
}
}
else
{
for (int i = 0; i < sz-1; i++)
{
a[i] = a[i + 1];
}
} sz = sizeof(a) / sizeof(a[0]);
for (int i = 0; i < sz-1; i++)
{
printf("%5d", a[i]);
}
return 0;
}
思路:分三步解决
(1)打印原数组:将数放进数组后再进行打印。
(2)打印插入了x1的数组:如果n1大于十,直接将这个数放进数组最后一位;如果n1小于十,将数组下标为n2之后的数各往后移一位,x1放入数组下标为n1的地方。
(3)打印删除了下标为n2的数组:如果n2的数不合法,将数组里所有的数往前移一位;如果n2的数合法,将该下标之后的数往前移一位。
2.数组顺序查找
s
代码
#include <stdio.h>
int main()
{
int n = 0, cnt = 1, x = 0, a = 1, sum1 = 0, sum2 = 0;
scanf("%d", &n);
int arr[100] = { 0 };
for (int i = 0; i < n; i++)
{
scanf("%d", &arr[i]);
}
scanf("%d", &x);
for (int i = n; i > 0; i--)
{
if (arr[i] == x&&x!=0)
{
cnt = 0;
printf("%d\n", i);
break;
}
else
{
cnt = 1;
}
}
if (cnt == 1)
{
printf("-1\n");
}
for (int i = 0; i < n; i++)
{
if (arr[i] > x)
{
sum1++;
}
else if (arr[i] < x)
{
sum2++;
}
}
printf("%d\n", sum1);
printf("%d", sum2);
return 0;
}
思路:首先先遍历一遍数组,看看输入的x在不在数组里,然后再和数组每一个数进行比较,统计大于或小于x的个数。
3.数组元素修改
代码
#include <stdio.h>
int main()
{
int a[20] = { 81,55,102,84,204,105,56,85,58,202,101,83,104,103,82,201,59,203,57,205 };
int cnt = 0;
for (int i = 0; i < 20; i++)
{
if (a[i] <= 59)
{
a[i] = -1;
}
else if (a[i] > 100 && a[i] <=200)
{
a[i] = -2;
}
else if (a[i] > 200)
{
a[i] = -3;
}
}
for (int j = 0; j < 20; j++)
{
printf("%5d", a[j]);
cnt += 1;
if (cnt == 5)
{
printf("\n");
cnt = 0;
}
}
return 0;
}
思路:比前两题简单,只要让每个数对比大小就行,唯一注意就是每五个数换一行。
4.字符个数统计
代码
#include <stdio.h>
void bubble_sort(char arr[], int sz)
{
for (int i = 0; i < sz-1; i++)
{
char tmp = 0;
for (int j = 0; j < sz-i- i; j++)
{
if (arr[j + 1] <= 122 && arr[j + 1] >= 97||arr[j+1]<=57&&arr[j+1]>=48)
{
if (arr[j] > arr[j + 1])
{
tmp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = tmp;
}
}
}
}
}
int main()
{
char arr[80] = { 0 };
char ch = 0, tmp=0;
int cnt = 0,a=0,i=0,j;
do
{
ch = getchar();
arr[cnt++] = ch;
} while (ch != '\n');
for (int i = 0; i < cnt; i++)//大写变小写
{
a = 0;
if (arr[i] <= 90 && arr[i] >= 65)
{
arr[i] = arr[i] + 32;
}
}
//排序
int sz = sizeof(arr) / sizeof(arr[0]);
bubble_sort(arr, sz);
for(int i=0;i<cnt;i++)
{
if ( arr[i] <= 122 && arr[i] >= 97)
{
a = 1;
for (int j = 0; j < cnt; j++)
{
if (arr[j] == arr[i]&&j>i)
{
a++;
arr[j] = '0';
}
}
for (int j = 0; j < cnt; j++)
{
if (j == i && arr[j] == arr[i])
{
printf("%c is %d\n", arr[j], a);
}
}
}
}
return 0;
}
思路:首先将字符串排序,然后将大写改成小写,这样就能abcd这样按顺序统计个数。
5.数组元素共享
代码
while (i < j) {
while (i < j && !IsPrimer(a[i]))//从左往右找,找到第一个 素数 的下标i
i++;
while (i < j && IsPrimer(a[j]))//从右往左找,找到第一个 和数 的下标j
j--;
if (i < j)//交换
{
a[i] ^= a[j];
a[j] ^= a[i];
a[i] ^= a[j];
}
}
思路:额没有(
6.找两个数组中共同元素值问题
z
代码
#include <stdio.h>
int main()
{
int n, i, j, s1[10] = { 10,21,34,12,15,8,17,20,23,30 }, s2[10];
scanf("%d", &n);
for (i = 0; i < n; i++)
scanf("%d", &s2[i]);
for (i = 0; i < 10; i++)
{
for (j = 0; j < n; j++)
{
if (s1[i] == s2[j])
{
printf("%5d", s1[i]);
s1[i] = 0;
}
}
}
return 0;
思路:两个数组之间分别比较是否相同。
7.数组循环右移k个位置
代码
#include <stdio.h>
int main()
{
int a[100], n, k, i, j;
int tmp;
scanf("%d", &k);
scanf("%d", &n);
for (i = 0; i < n; i++)
scanf("%d", &a[i]);
for (i = k; i > 0; i--)
{ tmp = a[n-1];
for (j = n-1; j > 0; j--)
{
a[j] = a[j-1];
}
a[0] = tmp;
}
for (i = 0; i < n; i++)
printf("%3d", a[i]);
return 0;
}
思路:将数组最后一个存起来,再将每个数后移一位,最后将最后的那个数放到第一个位置上。
8.数组逆序保存
代码
#include <stdio.h>
int main() {
int a[100], n, i, tmp;
scanf("%d", &n);
for (i = 0; i < n; i++)
a[i] = 2 * i + 1;
for (i = 0; i < n; i++)
printf("%3d", a[i]);
printf("\n");
for (i = 0; i < n-1; i++)
{ for(int j=0;j<n-i-1;j++)
if (a[j]<a[j+1])
{
tmp = a[j+1];
a[j + 1] = a[j];
a[j] = tmp;
}
}
for (i = 0; i < n; i++)
printf("%3d", a[i]);
return 0;
}
思路:冒泡排序。