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