携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第3天,点击查看活动详情
题目描述
解题思路
自定义结构体类型,成员包括姓名,学号,成绩。
对于姓名和学号是字符串,注意有\0,数组大小最小为11
我们分别用a,b表示最低成绩的下标,最高成绩的下标。用min,max分别表示最小成绩和最大成绩。
循环进行比较找出最低成绩的下标与最高成绩的下标。最后输出即可。
具体实现看下面的代码:
代码实现
#include <stdio.h>
#include <stdlib.h>
typedef struct studet
{
char name[11];
char id[11];
int grade;
}stu;
int main()
{
int n;
scanf("%d", &n);
stu* people = (stu*)malloc(n * sizeof(stu));
int i = 0;
int a = 0, b = 0, min = 0, max = 0;
for (i = 0; i < n; i++)
{
scanf("%s%s%d", (people+i)->name, (people + i)->id, &(people + i)->grade);
if (i == 0)//预设第一个人的成绩既是最大也是最小的
{
min = (people + i)->grade;
max = (people + i)->grade;
}
//进行比较,找出最低成绩的下标与最高成绩的下标
if ((people + i)->grade < min)
{
min = (people + i)->grade;
a = i;
}
if ((people + i)->grade > max)
{
max = (people + i)->grade;
b = i;
}
}
//输出
printf("%s %s\n", (people + b)->name, (people + b)->id);
printf("%s %s\n", (people + a)->name, (people + a)->id);
return 0;
}
题目描述
解题思路
两个思路:1.先排序,再剔除验证时重复的。2.先剔除验证时重复的,再排序。 剔除的规则是:除本身外,验证过程中发现相等的标记为0。
具体实现看代码
代码实现(以思路1为例)(本次以快排的方式实现
#include <stdio.h>
#include <stdlib.h>
//快排,看不懂的上面有链接
void quick_sort(int* arr,int left,int right)
{
int temp = arr[left];
int a = left;
int b = right;
if (a >= b)
return;
while (a<b)
{
while (arr[b] <= temp&& a < b)
b--;
while (arr[a] >= temp && a < b)
a++;
//交换
int t = arr[a];
arr[a] = arr[b];
arr[b] = t;
}
arr[left] = arr[a];
arr[a] = temp;
quick_sort(arr, left, a-1);
quick_sort(arr, b+1, right);
}
void delete(int* arr,int n)
{
int i = 0,j=0;
for (i=0;i<n;i++)
{
int temp = arr[i];
while (temp != 1&&temp)//保证这个数不是0
{
if (temp % 2 == 0)
temp /= 2;
else
temp = (temp* 3 + 1) / 2;
for (j = 0; j < n; j++)
{
if (arr[j] == temp)
arr[j] = 0;
}
}
}
}
int main()
{
int n;
scanf("%d", &n);
int* arr = (int*)malloc(n * sizeof(int));
int i = 0;
for (i=0;i<n;i++)
{
scanf("%d", arr + i);
}
//排序
quick_sort(arr, 0, n - 1);
//删除重复的
delete(arr,n);
//确定剩余几个数,目的是控制最后一个不打印空格
int b = 0;
for (i = 0; i < n; i++)
{
if (arr[i] == 0)
b++;
}
b = n - b;
//打印
for (i=0;i<n;i++)
{
if (arr[i] != 0)
{
printf("%d", arr[i]);
if (b-1)
{
printf(" ");
b--;
}
}
}
free(arr);
arr = NULL;
return 0;
}