站点图标 AI技术聚合

牛客网刷题篇

 

作者:敲代码の流川枫

博客主页:流川枫的博客

专栏:C语言从入门到进阶

语录:Stay hungry stay foolish

工欲善其事必先利其器,给大家介绍一款超牛的斩获大厂offer利器——牛客网

点击免费注册和我一起刷题吧 

文章目录

1. 矩阵转置

2. 上三角矩阵判定

3. 有序序列判断

4. 小乐乐与欧几里得 

5. 空心正方形图案

6. 箭形图案

7. 公务员面试

点击免费注册后点击下方标题来刷题吧

1. 矩阵转置

57c912bb4adb42558e60bafd1f8b10d0.png

 

 解题思路
在输入矩阵a的时候,同时将对应值赋给转置矩阵b,最后输出即可

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
	int n = 0;
	int m = 0;
	int i = 0;
	int j = 0;
	int arr[10][10] = { 0 };

	scanf("%d %d", &n,&m);

	for (int i = 0; i < n; i++)
	{
		for (j = 0; j < m; j++)
		{
			scanf("%d", &arr[i][j]);
		}
	}

	//输出
	for (i = 0; i < m; i++)
	{
		for (j = 0; j < n; j++)
		{
			printf("%d ", arr[j][i]);
			
		}
		printf("\n");
	}

	return 0;
}

2. 上三角矩阵判定

解题思路

对角线下方元素都为0则是上三角形矩阵,注意循环条件的控制

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
	int n = 0;
	int i = 0;
	int j = 0;
	int arr[10][10] = { 0 };
	scanf("%d", &n);
	for (int i = 0; i < n; i++)
	{
		for (j = 0; j < n; j++)
		{
			scanf("%d", &arr[i][j]);
		}
	}
	int flag = 1;//是上三角形矩阵

	for (int i = 0; i < n; i++)
	{
		for (j = 0; j < i; j++)
		{
			if (arr[i][j] != 0)
			{
				flag = 0;
				goto end;
			}

		}
	}
end:
	if (flag == 0)
	{
		printf("NO\n");
	}
	else
		printf("YES\n");
}

 每道题都有很多不同的解法,也有很多人分享自己的解题思路,可以讨论,见识到许多不同的思路,这也是我很喜欢牛客的原因之一

3. 有序序列判断

 解题思路

当有一个数比下一个数大时,将flag1置为1;当有一个数比下一个数小时,flag2置为1;遍历结束,flag1+flag2>1则说明数组是无序的

  

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
	int n = 0;
	scanf("%d", &n);
	int i = 0;
	int flag1 = 0;
	int flag2 = 0;
	int arr[100] = { 0 };
	for (i = 0; i < n; i++)
	{
		scanf("%d", &arr[i]);
		if (i > 0)
		{
			if (arr[i] > arr[i - 1])
			{
				flag1 = 1;
			}
			else if(arr[i]<arr[i-1])
			{
				flag2 = 1;
			}
			else
			{
				;
			}
		}
	}

	if (flag1 + flag2 <= 1)
	{
		printf("sorted\n");
	}
	else
	{
		printf("unsorted\n");
	}
	return 0;
}

牛客还支持各种语言,让你刷题没烦恼,还可以看排行里其他人的解法,总是会有很多解题的思路会让你受益

4. 小乐乐与欧几里得

 解题思路

求最大公约数常用的有两种方法,一是九章算术中的更相减损术:大数减小数直到相等,相等的数即最大公约数,该算法时间复杂度约为O(N);二是欧几里得的辗转相除法:大数除以小数取余数(相当于模运算),直到余数为零时(也即模运算为零时)的除数(也即模数)就是最大公约数,该算法时间复杂度约为O(logN)

求最小公倍数的方法:原始数据的乘积除以最大公约数

还要注意根据输入数据的范围确定变量的类型,否则会出现溢出

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
long long f(long long a, long long b)
{
	long long c = 0;
	long long d = 1;
	while (d)
	{
		c = a / b;
		d = a % b;
		a = b;
		b = d;
	}
	return a;
}
int main()
{
	long long a = 0;
	long long b = 0;
	long long ret = 0;
	long long e = 0;
	scanf("%lld%lld", &a, &b);
	if (a > b)
	{
		ret=f(a, b);
	}
	else
	{
		ret=f(b, a);
	}
	e = (a * b) / ret;
	printf("%lld\n", e + ret);


	return 0;
}

 还有个强大的功能就是这里有许多大佬面试的经验,可以让我们了解大厂面试是什么样的

5. 空心正方形图案

解题思路

注意循环条件的控制

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
	 int n = 0;
	 while (scanf("%d",&n) != EOF)
	 {
		 int i = 0;
		 int j = 0;
		 for (i = 0; i < n; i++)
		 {
			 for (j = 0; j < n; j++)
			 {
				 if ((i == 0) || (j == 0) || (i == n - 1) || (j == n - 1))
				 {
					 printf("* ");
				 }
				 else
					 printf("  ");
			 }
			 printf("\n");
		 }

	 }
	return 0;
}

 

还有海量求职信息,为你的求职之路保驾护航 

6. 箭形图案

 解题思路

本题可以将该图案拆分成上下两部分,对于上半部分设置space,star变量记录空格和星号的个数,然后对应自增和自减,然后补全后面的空格公式可以写成2*n+1-space-star
下半部分同理,重置space和star变量,然后对于自增和自减,补全空格输出即可

#include <bits/stdc++.h>
using namespace std;

int main() {
    int n = 0;
    //循环读入n
    while(scanf("%d", &n) != EOF) {
        //设置space,star值的初始值
        int space = 2*n;
        int star = 1;
        //外循环开始遍历每一行
        for(int i = 0; i < n+1; ++i) {
            //挨个输出空格的个数
            for(int j = 0; j < space; ++j)
                printf(" ");
            //挨个输出星号的个数
            for(int j = 0; j < star; ++j)
                printf("*");
            //输出剩下的空格
            for(int j = 0; j < 2*n+1-space-star; ++j)
                printf(" ");
            //更新下一行的空格数和星号个数
            space -= 2;
            star += 1;
            printf("\n");
        }

        //下半部分的初值设置
        space = 2;
        star = n;
        //外循环开始遍历每一行,内循环流程和上述一样
        for(int i = 0; i < n; ++i) {
            for(int j = 0; j < space; ++j)
                printf(" ");
            for(int j = 0; j < star; ++j)
                printf("*");
            for(int j = 0; j < 2*n+1-space-star; ++j)
                printf(" ");
            //更新下一行的空格和星号个数
            space += 2;
            star -= 1;
            printf("\n");            
        }
    }
    return 0;
}

7. 公务员面试

 

解题思路

输入一个数时,就判定他的大小,并赋值给max,min,且用sum求和,输入数量等于7时,sum减去max,min,求出平均数即可

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
	int n = 0;
	int score = 0;
	int max = 0;
	int min = 100;
	int  sum = 0;
	while (scanf("%d", &score)==1)
	{
		n++;
		if (score > max)
			max = score;
		if (score < min)
			min = score;
		sum += score;
		if (n == 7)
		{
			printf("%.2lf\n",(sum - max - min) / 5.0);
			max = 0;
			min = 100;
			sum = 0;
			n = 0;

		}
	}
	return 0;
}

“ 本期的分享就到这里了, 记得给博主一个三连哈,你的支持是我创作的最大动力!想要距离大厂更进一步吗?” 

点击免费注册和我一起刷题吧 

 

 

 

文章出处登录后可见!

已经登录?立即刷新
退出移动版