牛客网初阶练习(5)

x33g5p2x  于2022-02-07 转载在 其他  
字(2.1k)|赞(0)|评价(0)|浏览(228)

1.争夺前五名

2.竞选社长

方法1:

方法2:

方法3:

方法4:

1.争夺前五名

学会自己设计排序算法和使用C语言提供的库函数排序算法

方法一:自己设计排序算法

#include<stdio.h>
int main()
{
    int arr[40] = { 0 };
    int n = 0;
    //输入
    scanf("%d", &n);
    for (int i = 0; i < n; i++)
    {
        scanf("%d", &arr[i]);
    }
    //排序
    for (int i = 0; i < n-1; i++)
    {
        for (int j = 0; j < n - i - 1; j++)
        {
            if (arr[j] < arr[j + 1])
            {
                int temp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = temp;
            }
        }
    }
    //输出
    for (int i = 0; i < 5; i++)
    {
        printf("%d ", arr[i]);
    }
    return 0;
}

方法二:使用系统自带的排序算法

#include<stdio.h>
#include<stdlib.h>
int cmp_int(const void* e1, const void* e2)
{
    return *(int*)e2 - *(int*)e1;
}
int main()
{
    int arr[40] = { 0 };
    int n = 0;
    //输入
    scanf("%d", &n);
    for (int i = 0; i < n; i++)
    {
        scanf("%d", &arr[i]);
    }
    //排序
    qsort(arr, n, 4, cmp_int);
    //输出
    for (int i = 0; i < 5; i++)
    {
        printf("%d ", arr[i]);
    }
    return 0;
}

此处需要了解有关于qsort 排序函数的应用


 qsort()函数中四个参数的意义为:(目标数组的开始位置(如果从第一个开始。可直接写数组名)、要排序的数组的元素的个数、每个元素所占的字节数、比较函数)

比较函数:

e1在前时是升序,e1在后时是降序。

2.竞选社长

方法1:

#include<stdio.h>
int main()
{
	char arr[500] = { 0 };
	int i = 0;
	int A_num = 0;
	int B_num = 0;
	scanf("%s", &arr);
	int len = strlen(arr)-1;
	for (i = 0; i < len; i++)
	{
		if (arr[i] == 'A')
		{
			A_num++;
		}
		else
		{
			B_num++;
		}
	}
	if (A_num > B_num)
	{
		printf("A");
	}
	else if (A_num < B_num)
	{
		printf("B");
	}
	else
	{
		printf("E");
	}
	return 0;
}

方法2:

(用了gets函数)

#include<stdio.h>
int main()
{
	char arr[100] = { 0 };
	int count_A = 0;
	int count_B = 0;
	int i = 0;
	gets(arr);
	while (arr[i] != '0')
	{
		if ('A' == arr[i])
		{
			count_A++;
		}
		else
		{
			count_B++;
		}
		i++;
	}
	if (count_A > count_B)
	{
		printf("A");
	}
	else if (count_A < count_B)
	{
		printf("B");
	}
	else
	{
		printf("E");
	}

	return 0;
}

方法3:

(只定义一个变量flag,如果为A,flag++,如果为B,flag--,然后用flag与0的大小进行判断)

#include<stdio.h>
int main()
{
	char arr[100] = { 0 };
	int flag = 0;
	int i = 0;
	gets(arr);
	while (arr[i] != '0')
	{
		if ('A' == arr[i])
		{
			flag++;
		}
		else
		{
			flag--;
		}
		i++;
	}
	if (flag>0)
	{
		printf("A");
	}
	else if (flag<0)
	{
		printf("B");
	}
	else
	{
		printf("E");
	}

	return 0;
}

方法4:

(用getchar()函数进行一个个获取进行判定)

#include<stdio.h>
int main()
{
	int ch = 0;
	int flag = 0;
	while ((ch=getchar()) != '0' && ch != EOF)
	{
		if ('A' == ch)
		{
			flag++;
		}
		else if ('B' == ch)
		{
			flag--;
		}
	}
	if (flag > 0)
	{
		printf("A");
	}
	else if (flag < 0)
	{
		printf("B");
	}
	else
	{
		printf("E");
	}
	return 0;
}

相关文章