您的位置:首页 > 其它

遇到的比较有意思的问题(1)去掉重复数字(2)提取数组的子数组,求和最大的子数组、最大的子数组和

2013-11-03 17:04 381 查看
(1)   去掉数组中重复的数字,即每个相同的数字只出现一次

#include<stdio.h>
int main()
{
int a[20],i,j,k,n;
printf("请输入你想输入的数字的总个数 n=");
scanf("%d",&n);
for(i=0;i<n;i++)
{
printf("请输入a[%d]=",i);
scanf("%d",&a[i]);
}
printf("\n");
for(i=0;i<n;i++)
printf("%d ",a[i]);
printf("\n");
for(i=1;i<n;i++)
{
for(j=0;j<i;j++)
if(a[i]==a[j])
break;
if(j<i)
{
for(k=i+1;k<n;k++)
a[k-1]=a[k];
i--; n--;
}
}
for(i=0;i<n;i++)
printf("%d ",a[i]);
}


(2)在长度为8的数组里输入8个数:有正数也有负数,数组中连续的一个或多个整数组

成一个子数组,每个子数组都有一个和。求所有子数组的和的最大值

例如:数组a[8] ={1,-3,4,5,9,-7,5,-4}; 的字数组之一是 {-3,4,5}

和最大的字数组是{4,5,9} 和为 18

#include<stdio.h>
int main()
{
int a[8]= {1,-3,4,5,9,-7,5,-4},b[8]={0};
int i,j,max=0,sum=0,sum1,row1 ,row2,k;
for(i =0;i<=7;i++)
{
for(j=i;j<7;j++)
{
sum=sum+a[j];
if(max<sum)
{
max=sum;
row1=i,row2=j;
}
printf("sum=%d\t",sum);
}
sum = 0;
printf("\n");

}
printf("和最大max=%d \n子数组为",max);
for(k=row1;k<=row2;k++)
printf("a[%d]=%d\t",k,a[k]);

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: