顺序表数组的遍历

一:最大最小值问题

a>在一个数据集合中(a[10]),没有重复值,有正有负。

求正数中的次大次小;

求负数中的次大次小

int max1,max2,fmax1,fmax2,i;
max1=max2=fmax1=max2=0;
for(i=0;i<10;i++){
  if(a[i]>0){
    if(a[i]>max1){
      max2=max1;
      max1=a[i]
    }
    else if(a[i]>max2)
      max2=a[i];
  }
  else if(a[i]<0){
    if(!fmax1){
      fmax1=fmax2=a[i];
    }
    else if(a[i]>fmax1){
      fmax2=fmax1;
      fmax1=a[i]
  }
  else if(fmax1==fmax2)
     fmax2=a[i];
  else if(a[i]>fmax2)
     fmax2=a[i];
  } 
}

b>在一个数据集合中(a[10]),没有重复值,有正有负

在数组中求一个连续子集,使得和值最大

int i,k,max,tempmax;//max为最大和值,k为该连续子集最后一个元素的下标
max=tempmax=0;
for(i=0;i<10;i++){
  if(tempmax+a[i]>0){
    tempmax+=a[i];
    if(tempmax>max){
      max=tempmax;
      k=i;
    }
  }
  else
    tempmax=0;
}

二:设数据集合a{2,3,5,7,8};数据集合b{3,4,6,7,8,9,10,12};均为升序;

将a与b合并成一个升序并去除重复值

int ab{N},i,j,k;\\N为常数(足够大)
i=j=0=k;
while(i<5||j<8){
  if(i<5&&j<8){
    if(a[i]<a[j])
      if(ab[k-1]!=a[i])
        ab[k++]=a[i++];
      else
        i++;
     else{

      if(ab[k-1]!=a[j])
        ab[k++]=a[j++];
      else
        j++;
  else if(i<5)
    if(ab[k-1]==a[i])
      i++;
    else
      a[k++]=a[i++];  
  else if(j<8)

    if(ab[k-1]==b[j])
      j++;
    else
      a[k++]=a[j++]; 
}
for(i=0;i<k;i++)
  printf("%d\t"ab[k]); 

三:任何一个大于1正整数可分解为若干个素数之积。要求编一个程序,输入一个正整数,输出该正整数的所有因数。

#include<stdio.h>
int main()
{
  int i,j,n;
  printf("请输入一个正整数");
  scanf("%d",&n);
  i=2;
  while(n!=1){
    while(n%i==0){
      n/=i;
      printf("%d\t",i);
    }
    i++;
  }
}

四:任意输入正整数x,y(x,y>2)

输出最小公倍数和最大公约数

#include<stdio.h>
int main()//穷举法
{
  int x,y,i,k;
  printf("请输入两个正整数:");
  scanf("%d%d",&x,&y);
  for(k=x<y?x:y;k>1&&(x%k+y%k);k--);//将k赋值为x与y中最小值,并使得k递减,当k第一次满足同时为x与y的公约数时,停止循环,此时k最大
  printf("最大公约数为%d,最小公倍数为%d",k,x*y/k);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值