c语言程序2

6,计算数组中0,1的个数

有一个数组:int arr[20] ={1,0,1,0,0,0,1,1,1,0,0,1,1,0,1,0,0,1,1,1};
数组中全部都是由0和1组成,是写程序,计算数组中0,1的个数
要求:
不得使用任何形式的判断语句
包括但不限于if、switch、三目与算符,或以循环代替判断的方法。

7,给定一个含有n个元素的整型数组a,求a中所有元素的和

循环累加

如何利用这个函数那,忘了

8,求数组的最大值和最小值

第一种

#include<stdio.h>  

#include<stdlib.h>  

/*定义宏常量,代表数组元素的个数*/  

#define LENGTH 5   

   

int main(void) {  

      

    int a[LENGTH];  

    printf("Please enter %d integers:", LENGTH);  

    for (int i = 0; i < LENGTH; i++) {  

        scanf_s("%d", &a[i]);  

    }//读取数组值到数组a中  

   

    int max = a[0], min = a[0];    

    for (int i = 0; i < LENGTH; i++) {  

        if (a[i] > max) {  

            max = a[i];  

        }  

        if (a[i] < min) {  

            min = a[i];  

        }  

    }  

   

    printf("max is %d\n", max);  

    printf("min is %d\n", min);  

    system("pause");  

    return 0;  

} 

利用函数形式写,这个有错

第二种方式:

可以采用两两分组的模式进行比较,让其中较小的元素与最小值进行比较,确定临时的最小值,同理让较大的元素与最大值进行比较,确定最大值。这样一次步进为2的遍历就能够确定最大最小值。代码如下:

第三种方式:可以采用分治算法完成上最大值与最小值的求解,使用递归的形式完成分治算法的求解,首先是结束条件:当子数组中含有一个元素最大最小值相等,或当子数组中含有两个元素直接可以确定最大最小值。其他情况下确定中间元素分别求左半部分和右半部分的最大最小值,最后将左右两部分的最大最小值进行综合确定最大值和最小值,代码如下:

9,最大子段和

10,排序

在未排序的数组中找到第k个最大元素。你需要找的是数组排序后的第k个最大的元素而不是第k个不同的元素。

1,排序从大到小,从小到大

2,找到第几个,nums[k-1]

3,学会做函数

解答:

#include <stdio.h>  

void swap(int *a,int *b)  

{  

    int temp;  

    temp=*a;  

    *a=*b;  

    *b=temp;  

}  

int find_kth_largest(int *nums,int numsize,int k){  

    //冒泡排序  

    int i,j;  

    for(i=0;i<numsize;i++)  

    {  

        for(j=i+1;j<numsize;j++)  

        {  

            if(nums[i]<nums[j])  //决定按什么顺序排

                swap(&nums[i],&nums[j]);

        }  

    }  

    return nums[k-1];  

}  

int main(int argc,const char *argv[])  

{  

    int arr[10]={1,3,6,5,4,8,9,3,0,2};  

    int tmp;  

    tmp=find_kth_largest(arr,10,3);  

    printf("%d\n",tmp);  

    for(int i=0;i<10;i++)//排序结果输出,看排序是否正确  

        printf("%d ",arr[i]);  

    return 0;  

}  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值