#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
//第一题 数组逆序输出
/*
//输入 5 个整数存进数组,然后倒着输出。
//
//输入:1 2 3 4 5
//输出:5 4 3 2 1
int main()
{
//输入五个数
int arr[5] = { 0 };
int i = 0;
for (i = 0; i < 5; i++)
{
scanf("%d",&arr[i]);
}
//倒着输出
for (i=4;i>=0;i--)
{
printf("%d ",arr[i]);
}
return 0;
}
*/
//第二题 求最大值和最小值(顺便记录下标)
//
//输入 10 个数,输出最大值、最小值,以及它们分别是第几个数。
//输入:3 7 2 9 5 1 8 4 6 0
//输出:最大值 9 在第 4 个;最小值 0 在第 10 个
//考点:先把 max = a[0] 而不是 max = 0(否则全是负数就错了,这是高频坑)。
/*
int main()
{
int arr[10] = {0};
int i = 0;
for (i = 0; i < 10; i++)
{
scanf("%d",&arr[i]);
}
int max = arr[0];
int min = arr[0];
//最大值
for (i = 0; i < 10; i++)
{
if(arr[i]>=max)
{
max = arr[i];
}
}
printf("最大值是%d,", max);
for(i = 0; i < 10; i++)
{
if (max == arr[i])
{
printf("在第%d位\n", i+1);
}
}
//最小值
for (i = 0; i < 10; i++)
{
if (arr[i] <=min)
{
min = arr[i];
}
}
printf("最小值是%d,", min);
for (i = 0; i < 10; i++)
{
if (min == arr[i])
{
printf("在第%d位\n", i + 1);
}
}
return 0;
}
*/
//补充
/* 在前面可以简化两个循环
int maxIndex = 0; // 先假设第 0 个最大
for (i = 1; i < 10; i++) // 从 1 开始比,arr[0] 已经是候选了
{
if (arr[i] > arr[maxIndex])
{
maxIndex = i; // 只记位置,值随手就能拿到
}
}
printf("最大值是%d,在第%d位\n", arr[maxIndex], maxIndex + 1);
*/
//第三题
//数组求和与平均值
//输入 8 个整数,求总和与平均值(保留两位小数)。
//考点:double 除法前要转型 sum / 8.0,直接 sum / 8 会得到整数。
/*
int main()
{
int arr[8] = { 0 };
int i = 0;
for (i = 0; i <8; i++)
{
scanf("%d", &arr[i]);
}
int sum = 0;
for (i = 0; i < 8; i++)
{
sum += arr[i];
}
printf("%d\n",sum);
printf("%.2lf",sum/8.0);
return 0;
}
*/
//第四题
//4. 统计奇偶个数
//输入 10 个整数,分别统计奇数和偶数各多少个,并把奇数、偶数分别输出。
//考点:a[i] % 2 == 0,以及"边遍历边输出"。
/*
int main()
{
int arr[10] = {0};
int i = 0;
int ji = 0;
int ou = 0;
for (i = 0; i < 10; i++)
{
scanf("%d",&arr[i]);
if (arr[i] % 2 == 0)
{
ou++;
}else
{
ji++;
}
}
printf("偶数有%d个:", ou);
for (i = 0; i < 10; i++) // 第一遍:专门捞偶数
{
if (arr[i] % 2 == 0)
printf("%d ", arr[i]);
}
printf("\n奇数有%d个:", ji);
for (i = 0; i < 10; i++) // 第二遍:专门捞奇数
{
if (arr[i] % 2 != 0)
printf("%d ", arr[i]);
}
return 0;
}
*/
//5. 查找某个数
//输入 10 个数,再输入一个目标值,问它是否在数组里、在第几个位置(只找第一次出现的)。
//考点:设一个标志变量 flag,找到就跳出。
//
/*
int main()
{
int arr[10] = { 0 };
int i = 0;
int target = 0; // 要找的数(起个不混淆的名字)
int found = 0; // 标志变量:0=还没找到,1=找到了
for (i = 0; i < 10; i++)
{
scanf("%d",&arr[i]);
}
printf("请输入flag的数");
scanf("%d", &target);
for (i = 0; i < 10; i++)
{
if (arr[i] == target)
{
found = 1; // 立个flag:找到了
printf("%d这个数在数组里,在第%d个\n", target, i + 1);
break; // 只找第一个,找到就走
}
}
if (found == 0) // 循环走完了found还是0 → 全程没找到
{
printf("%d不在数组里\n", target);
}
return 0;
}
*/
//三、稍微动脑(练"交换 + 双下标")
//6. 数组元素左移一位
//把数组里所有元素整体向前移一位,第一个元素移到末尾。
//
//plaintext
//
//输入:1 2 3 4 5
//输出:2 3 4 5 1
//考点:先存住 a[0],再从前往后挪,最后把存的值放末尾。
//
/*
int main()
{
int arr[100];
int n = 0;
int i = 0;
printf("输入数组的长度:");
scanf("%d", &n); // \n 删掉
for (i = 0; i < n; i++)
scanf("%d", &arr[i]);
int b = arr[0]; // 先存第一个
for (i = 0; i < n; i++)
{
if (i < n - 1)
arr[i] = arr[i + 1]; // 从前往后挪(左移正确方向)
else
arr[n - 1] = b; // 存的值补到末尾
printf("%d ", arr[i]);
}
return 0;
}
*/
//7. 冒泡排序(从大到小)
//输入 10 个数,排序后输出(从大到小)。
//考点:双重 for 循环 + 交换 temp,这题你后面考试一定会遇到,值得现在就啃。
/*
int main()
{
int a[10] = { 0 };
int i = 0;
for (i =0;i<10;i++)
{
scanf("%d",&a[i]);
}
int j = 0;
int temp =0;
for (i = 0; i < 9; i++) // 一共跑几趟?
{
for (j = 0; j < 9-i; j++) // 这一趟比几次?
{
if (a[j] < a[j + 1])
{
temp = a[j]; // 先把 a[j] 存进杯子
a[j] = a[j + 1]; // 后面的倒进前面
a[j + 1] = temp; // 杯子里的倒给后面
// 三行交换
}
}
}
for (i = 0; i < 10; i++)
{
printf("%d ", a[i]);
}
return 0;
}
*/
//四、挑战题(做出来不超纲,但要想)
//8. 找出出现次数最多的数
//输入 10 个 0~9 之间的整数,找出出现次数最多的那个数字。
//
//plaintext
//
//输入:1 3 3 5 3 7 3 9 2 0
//输出:3 出现了 4 次
//提示:开一个 int count[10] = { 0 }; ,用输入的数字当下标去计数(这叫"计数数组",非常经典的技巧,只用到数组,不涉及指针)。
//
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
int count[10] = { 0 }; // 10 个计数器:count[0]~count[9],全清零
int num = 0; // 临时存放每次读进来的数字
int i = 0;
int maxIndex = 0; // 记录"出现次数最多的数字",先假设是 0
printf("请输入10个0~9之间的整数:\n");
// 第一步:边读边计数
for (i = 0; i < 10; i++)
{
scanf("%d", &num); // 读到比如 3
count[num]++; // count[3] 加 1 —— 核心就这一句
}
// 第二步:在 count 数组里找最大值的位置
for (i = 1; i < 10; i++) // 从 1 开始,因为 count[0] 已经是候选了
{
if (count[i] > count[maxIndex])
{
maxIndex = i; // 谁出现得多,冠军下标搬到谁家
}
}
// 第三步:输出
// maxIndex 就是那个出现最多的数字,因为它同时是下标
printf("%d 出现了 %d 次\n", maxIndex, count[maxIndex]);
return 0;
}