提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
一维数组基础
前言
这篇文章主要讲了一维数组的基础部分的习题。
一、逆序输出
代码(以10个数为例)
#include<stdio.h>
int main()
{
int arr[10] = {0};
for(int i = 9;i>=0;i--)
{
scanf("%d",&arr[i]);
}
for(int i = 0;i<10;i++)
{
printf("%d ",arr[i]);
}
return 0;
}
二、求一维数组动态和
代码
#include<stdio.h>
int main()
{
int a,n,sum=0;
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%d",&a);
sum+=a;
printf("%d ",sum);//每次的和为a[0],a[0]+a[1],a[0]+a[1]+a[2]……
}
return 0;
}
三、斐波那契数列
代码
#include<stdio.h>
int main()
{
int n,a=1,b=1;//注意,本题是计算限制到46位,如果50位用long long
scanf("%d",&n);
for(int i=3;i<n+1;i++)
{
a=a+b;//a=2 a=3 a=5 a=8
b=a-b;//b=1 b=2 b=3 b=5
}
printf("%d",a);
return 0;
}
四、最大数与最小数之差
代码
#include<iostream>
#include<algorithm>
using namespace std;
int main(){
int n,a[100005];
cin>>n;
for(int i=1;i<=n;i++)
cin>>a[i];
sort(a+1,a+1+n);//这里直接用排序了,当然我们也可以设max=0,min=1000的方法来比较赋值
cout<<a[n]-a[1]<<endl;
return 0;
}
五、判断数列是否为有序数列
代码
#include <stdio.h>
int main()
{
int n = 0;
int arr[50] = {0};
scanf("%d", &n);
int i = 0;
int flag1 = 0;
int flag2 = 0;
for(i=0; i<n; i++)
{
scanf("%d", &arr[i]);
if(i>0)//一下if既能判断从小到大也能判断从大到小,原理是有序数列只能满足二者中一个
{
if(arr[i]>arr[i-1])
flag1 = 1;
else if(arr[i]<arr[i-1])
flag2 = 1;
}
}
if(flag1+flag2 > 1)
printf("unsorted\n");
else
printf("sorted\n");
return 0;
}
六、序列中删除指定数字
代码
#include<stdio.h>
int main()
{
int n=0;
scanf("%d",&n);
int arr[n];
int i=0;
for(i=0;i<n;i++)
{
scanf("%d",&arr[i]);
}
int del=0;
scanf("%d",&del);
for(i=0;i<n;i++)
{
if(arr[i]==del)
{
arr[i]=0;//本题0不在输入的范围内,故可以将要删除的数改为0
}
}
for(i=0;i<n;i++)
{
if(arr[i])
{
printf("%d ",arr[i]);
}
}
return 0;
}
做一个说明:对于要删除的数字,我们可以把它变为数据范围内不存在的数字,输出的时候进行判断,同理,在后期删除字符串的时候,我们可以把想删除的部分变成不在输入范围内的字符,输出的时候判断是否输出。
七、有序序列插入一个整数
代码
#include<stdio.h>
int main() {
int n = 0;
scanf("%d", &n);
int arr[51] = { 0 };
int i = 0;
for (i = 0; i < n; i++)
{
scanf("%d", &arr[i]);
}
int k = 0;
scanf("%d", &k);
for (i = n - 1; i >= 0; i--)
{
if (arr[i] > k)
{
arr[i + 1] = arr[i];//从后往前查,一个一个往后挪
}
else
{
arr[i + 1] = k;
break;
}
if (i == 0)
{
arr[i] = k;
}
}
for (i = 0; i < n + 1; i++)
{
printf("%d ", arr[i]);
}
return 0;
}
其实也可以把数直接放进去,sort一下。
八、将有序数列二合一
代码
#include<stdio.h>
int main()
{
int arr1[1000] = { 0 };
int arr2[1000] = { 0 };
int n, m;
scanf("%d %d", &n, &m);
int i = 0;
for (i = 0; i < n; i++)
{
scanf("%d", arr1 + i);
}
for (i = 0; i < m; i++)
{
scanf("%d", arr2 + i);
}
int time = n + m;
int x = 0;
int y = 0;
while (time--)
{
if (x >= n)
{
for (; y < m; y++)
{
printf("%d ", arr2[y]);
}
}
else if (y >= m)
{
for (; x < n; x++)
{
printf("%d ", arr1[x]);
}
}
else
{
if (arr1[x] < arr2[y])
{
printf("%d ", arr1[x]);
x++;
}
else
{
printf("%d ", arr2[y]);
y++;
}
}
}
return 0;
}
那么一维数组的基础部分就结束了。
既然都看到这里了,这么好的博主不点个关注吗[手动狗头]。