2_27刷题小结

变种水仙花例题来简化代码

在这里插入图片描述
根据上述题目,首先想到就是这个数取余和除10000,1000,100,10.
代码如下:

int main()
{
    
    
	int i = 0;
	for (i = 10000; i <= 99999; i++)
	{
    
    
		int a = i;
		int b = i;
		int c = i;
		int d = i;
		int e = i;
		int f = i;
		int j = i;
		int k = i;
		a %= 10000;
		b /= 10000;
		c %= 1000;
		d /= 1000;
		e %= 100;
		f /= 100;
		j %= 10;
		k /= 10;
		if (i == (j*k) + (e*f) + (c*d) + (a*b))
		{
    
    
			printf("%d ", i);
		}
	}

	return 0;
}

会发现代码太难看了,占用内存多。思考一下,发现while循环应该可以简化!
1.每次循环可以将10000循环到10。
2.不用创建那么多变量,只需一个变量每次累加就行。
简化如下:

int main()
{
    
    
    int i=0;
    for(i=10000;i<=99999;i++)
    {
    
    
        int k=10000;
        int a=0;
        while(k>=10)
        {
    
    
            a+=(i%k)*(i/k);
            k/=10;
        }
        if(a==i)
        {
    
    
            printf("%d ",i);
        }
    }
    return 0;
}

这才算上个正常代码,哈哈哈!

库函数简化代码量

看题:
在这里插入图片描述
本题刚开始切入的时候有些困扰,因为秉承着不浪费空间的想法,创建了arr[n]的数组,但是[]里是常量!后来干脆大数组arr[50]怼上,给前n个赋值就好了。后面的话创建了个排序函数,进行排序,并输出前五名。
看代码:

void order(int arr[100], int s)
{
    
    
	int i = 0;
	int j = 0;
	int tmp = 0;
	for (i = 0; i<s; i++)
	{
    
    
		for (j = 0; j<s - i - 1; j++)
		{
    
    
			if (arr[j]<arr[j + 1])
			{
    
    
				tmp = arr[j];
				arr[j] = arr[j + 1];
				arr[j + 1] = tmp;
			}
		}
	}
	i = 0;
	for (i = 0; i<s; i++)
	{
    
    
		printf("%d ", arr[i]);
	}
}
int main()
{
    
    
	int n = 0;
	scanf("%d ", &n);
	int arr[50] = {
    
     0 };
	int i = 0;
	for (i = 0; i < n; i++)
	{
    
    
		scanf("%d", &arr[i]);
	}
	int sz = n;
	//传数组排序
	order(arr, sz);
	return 0;
}

采用了一个自定义冒泡排序。
后来查阅了一下,库函数中有冒泡排序函数,如下;在这里插入图片描述
base代表要比较的首元素地址,采用void*类型,是可以接受任何类型比较的数据,num表示比较的个数,width表示要比较类型的字节数,后面comp函数是我们自己去定义如何比较的。
总的来说,还是库函数香!
代码如下:

#include <stdio.h>
#include <stdlib.h>
int cmp(const void*elem1,const void*elem2)
{
    
    
    return *(int*)elem2-*(int*)elem1;
}
int main()
{
    
    
    int n=0;
    scanf("%d ",&n);
    int sz=n;
    int arr[50]={
    
    0};
    int i=0;
    for(i=0;i<n;i++)
    {
    
    
        scanf("%d",&arr[i]);
    }
    //传数组排序
    qsort(arr,n,sizeof(int),cmp);
    for(i=0;i<5;i++)
    {
    
    
     printf("%d ",arr[i]);
    }
    return 0;
}

这里多引入了一个头文件<stdlib.h>。

小结

日后刷题中,注重代码的美观和可读性,多熟悉库函数的用法。

猜你喜欢

转载自blog.csdn.net/m0_52751535/article/details/114175302