/////////////////////////////////////选做题
//1、随机产生20个[10 , 50]的正整数存到数组中,并求数组中的所有元素最大值、最小值、平均值以及各元素之和,及第二大值。
//求最大值,最小值,都是拿每一个元素和Max, min,比较
/*
int a[20] = {0};
int average = 0, secondmax = 0, max = 0, min = 50, sum = 0;
for (int i = 0; i < 20; i ++) {
a[i] = arc4random() % (50 - 10 + 1) + 10;
printf("%d ", a[i]);
sum = sum + a[i];
if (a[i] > max) {
max = a[i];
}
if (min > a[i]) {
min = a[i];
}
}
average = (max + min) / 2;
for (int i = 0; i < 20 ; i ++) {
if (a[i] > max) {
secondmax = max;
max = a[i];
} else if (a[i] > secondmax && a[i] != max) {
secondmax = a[i];
}
}
printf("最大值是:%d 最小值是:%d 平均值是:%d 元素之和是:%d 第二大值是:%d\n", max, min, average, sum, secondmax);
*/
//2.编程在一个已知的字符串中查找最长单词,假定字符串中只含字母和空格,用空格来分隔单词
/*
char str[40] = "I love ios and i want an iphone 6Plus";
int i = 0, nowlenght = 0, maxlenght = 0, startnumber = 0;
printf("%s\n",str);
for (i = 0; i < 40; i ++) {
if (str[i] != ' ' && str[i] != '\0') {
nowlenght ++;
} else {
if (nowlenght > maxlenght) {
maxlenght = nowlenght;
startnumber = i - nowlenght;
}
nowlenght = 0;
}
}
printf("%d\n", maxlenght);
for (int i = startnumber; i < maxlenght + startnumber; i ++) {
//它是从开始位置一直打印到最长的单词,从I开始,循环次数就是maxlenght +startnumber
printf("%c", str[i]);
}
printf("\n");
*/
//1.耶稣有13个门徒,其中有一个就是出卖耶稣的叛徒,请用排除法找出这位叛徒:13个人围坐一圈,
//从第一个人开始循环报数,数到三排除,最后剩下的人就是叛徒
/*
int people[13] = {1,2,3,4,5,6,7,8,9,10,11,12,13};
int count = 0;//用来记录报数
int number = 13;//记录活着的人数
int i = 0;//记录第几个人正在报数
while (number > 1) {
if (people[i] != 0) {
count++; //如果a[i ]没有被剔除掉,报数有效
} if (count == 3) {
people[i] = 0;//剔除掉,
count = 0;//报数清零
number--;//存活人数减一
}
i++;//记录报数的下一个人
if (i == 13) {
i = 0;// 当超出范围时,立即将报数人数置为第一人
}
} for (int i = 0; i < 13; i++) {
if (people[i] > 0) {
printf("叛徒是第%d人 ", people[i]);
}
}
*/
//9.有1000000个数,每个数取值范围是0-999999
//找出其中重复的数,重复次数。
//第一种方式
/*
int a[10] = {0};//0~9
int ran = 0;//接收每次的随机值
for (int i = 0; i < 10; i++) {
ran = arc4random() % 10;//随机下标
printf("%d ",ran);
a[ran]++;//将下标对应的元素值加1
}
printf("\n");
for (int i = 0; i < 10; i++) {
if (a[i] > 1) {
printf("%d 重复 %d次数\n", i, a[i]);
}
}
*/