现在的位置: 首页 > 综合 > 正文

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

2013年12月12日 ⁄ 综合 ⁄ 共 823字 ⁄ 字号 评论关闭

(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;   
}

抱歉!评论已关闭.