1)
解题思路:
首先,输入数组元素,循环判断是否为顺序子数组,若是,累加元素并判断它的下一位与下两位的大小关系
,若不是,则重新累加元素,然后将子数组输出,最后判断子数组大小即可
遇到的问题:
需要较好的逻辑理清关系
涉及的知识点:
循环结构,if条件语句
运行结果:
例:
输入一个数组:1234567809
子数组最大值:max=36
#include<stdio.h>
int main()
{
int a[10],k[10],i,sum=0,c=0;//定义变量
for(i=0;i<=9;i++)//循环输入
{
printf("a[%d]=",i);
scanf("%d",&a[i]);
}
c=a[0];
for(i=0;i<9;i++)//循环并判断是否为顺序子数组
{
if(a[i]<a[i+1])
{
c=c+a[i+1];//累加计算总和
if(a[i+1]>a[i+2])//当不满足条件时输出子数组的总和
{
k[sum]=c;
printf("k[%d]=%d\n",sum,c);
sum++;
}
}
else//后一元素小于前一元素
{
c=a[i+1];//重新循环,换成另一个子数组
continue;
}
}
printf("k[%d]=%d\n",sum,c);//输出子数组
int g,j,max=k[0];
for(j=1;j<=sum;j++)
{
if(k[j]>max)
{
int max=k[j];
}
}
printf("max=%d\n",max);//输出最大子数组
}
2)
解题思路:
首先,构造intersect函数,然后遍历两个数组,找出相同的数,并赋值给新数组
,计算长度,然后将数组长度通过指针存放,接着为返回数组分配空间,并赋值
遇到的问题:
返回数组涉及指针和动态内存分配问题,较为麻烦
涉及的知识点:
动态存储,指针,循环结构,if条件语句,函数调用
int* intersect(int* a,int* b,int* returnSize)
{
int size=0;//定义整形变量
int f[10];//定义整形数组
int *f_bak;
for(int i=0;i<=9;i++)//遍历
{
for(int j=0;j<=9;j++)
{
if(a[i]==b[j])//找到相等的数,然后放入新数组中
{
f[size]=b[j];
size++;
break;
}
}
}
*returnSize=size;//返回数组的大小
f_bak=(int *)malloc(sizeof(int)*size);//为返回数组分配空间
memcpy(f_bak,f,sizeof(int)*size);//为返回数组赋值
return f_bak;
}
3)
解题思路:
首先,循环输入,然后利用冒泡排序法排序,然后按顺序输出,或反序输出
遇到的问题:
无
涉及的知识点:
循环结构,if条件语句
运行结果:
例:
输入:17895234
正序输出:12345789
反序输出:98754321
#include<stdio.h>
int main()
{
int a[10];
int i,j,t,k,x;
for(i=0;i<=9;i++)//循环输入
{
printf("a[%d]=",i);
scanf("%d",&a[i]);
}
for(i=0;i<9;i++)
{
for(j=0;j<9-i;j++)
{
if(a[j]>a[j+1])//进行排序
{
t=a[j];
a[j]=a[j+1];
a[j+1]=t;
}
}
}
printf("please choose your way:0或1\n");//设置两种选择,便于控制输出的方式
scanf("%d",&x);
if(x==0)//顺序输出
{
printf("升序输出:\n");
for(i=0;i<10;i++)
{
printf("%d\n",a[i]);
}
}
if(x==1)//倒序输出
{
printf("降序输出:\n");
for(k=9;k>=0;k--)
{
printf("%d\n",a[k]);
}
}
return 0;
}
1)输入一个数组,求子数组最大值 2)xx 3)利用冒泡排序法排序
最新推荐文章于 2024-06-15 21:07:47 发布