c刷题[6]

news2025/1/18 10:00:27

目录

杨辉三角

杨氏矩阵

字符串左旋

判断字符串 

公务员面试

改数字

数字三角形

输出不重复序列


杨辉三角

在屏幕上打印杨辉三角。

先转化成二维数组:

1

1 1

1 2 1

1 3 3 1

规律:每行第一个元素和最后一个元素为1(主对角),从第三行开始,中间元素等于左上方元素和正上方元素相加。

	int arr[10][10] = { 0 };
	int i = 0;
	int j = 0;
	for (i = 0; i < 10; i++)
	{
		for (j = 0; j <= i; j++)//打印一半三角即可
		{
			if (j == 0 || i == j)
				arr[i][j] = 1;
			else
			{
				arr[i][j] = arr[i - 1][j - 1] + arr[i - 1][j];
			}
		}
	}
		for (i = 0; i < 10; i++)
		{
			for (j = 0; j < 10-i; j++)
			{
				printf(" ");
			}
			for (j = 0; j <= i; j++)
			{
				printf("%2d ", arr[i][j]);
			}
			printf("\n");
		}

打印效果:

杨氏矩阵

有一个数字矩阵,矩阵的每行从左到右是递增的,矩阵从上到下是递增的,请编写程序在这样的矩阵中查找某个数字是否存在。

要求:时间复杂度小于O(N);

bool find_square_n(int(*arr)[3], int* r, int* c, int n)
{
	//按行找
	int i = 0;
	int j = *c - 1;
	while (i < *r && j >= 0)
	{
		if (n > arr[i][j])
			i++;
		else if (n
			< arr[i][j])
			j--;
		else
		{
			*r = i;//返回型参数
			*c = j;
			return true;
		}
	}
	return false;
}

如果我们想一次性返回多个值,不如传递实参的地址过去,通过返回型参数实现多个值的返回。

测试:

字符串左旋

实现一个函数,可以左旋字符串中的k个字符。

例如:

ABCD左旋一个字符得到BCDA

ABCD左旋两个字符得到CDAB

方法一:
每次旋转一个字符,其他元素依次往前移。

void left_spin(char* arr, int k)
{
	assert(arr);
	int len = strlen(arr);
	assert(len);//0不能做余数且旋转无意义
	k %= len;//避免重复旋转
	for (int i = 0; i < k; i++)
	{
		int tmp = arr[0];//接收旋转元素
		for (int j = 0; j <len-1;j++ )//从前往后
			arr[j] = arr[j + 1];
		arr[len - 1] = tmp;
	}
}

右旋与左旋差不多,如果左旋k次,向右旋转len-k次即可。  

方法二:

逆序前k个数和后len-k个数,然后整体逆序 

void reverse(char*left, char*right)
{
	assert(left && right);
	while (left < right)
	{
		char tmp = *left;
		*left = *right;
		*right = tmp;
		left++;
		right--;
	}
}

测试: 

判断字符串 

写一个函数,判断一个字符串是否为另外一个字符串旋转之后的字符串。

例如:给定s1 =AABCD和s2 = BCDAA,返回1

给定s1=abcd和s2=ACBD,返回0.

AABCD左旋一个字符得到ABCDA

AABCD左旋两个字符得到BCDAA

AABCD右旋一个字符得到DAABC

方法一:逐个旋转对比

bool is_str(char* arr1, const char* arr2)
{
	int len = strlen(arr2);
	assert(arr1 && arr2);
	for (int i = 0; i < len; i++)
	{
		int tmp = arr1[0];//接收旋转元素
		for (int j = 0; j < len - 1; j++)//从前往后
			arr1[j] = arr1[j + 1];
		arr1[len - 1] = tmp;
		if (strcmp(arr1, arr2) == 0)
		{
			return true;
		}
	}
	return false;
}

测试: 

 

方法二:

在原字符串后补上源字符串,再查找是否存在相应的字串。

ABCDEFABCDEF

例:

CDEFAB -——>ABCDEFABCDEF

EFABCD——->ABCDEFABCDEF

bool is_str(char* arr1, const char* arr2)
{
	assert(arr1 && arr2);
	int len1 = strlen(arr1);
	int len2 = strlen(arr2);
	assert(len1 - len2 == 0);//长度是否相等
	strncat(arr1, arr1, len1);//,注意arr1有充足空间,不能用strcat
	char* arr = strstr(arr1, arr2);
	if (arr == NULL)
		return false;
	else
		return true;

}

公务员面试

公务员面试_牛客题霸_牛客网

这道题不难,主要想说的是多组输入如果遇到输入过多数据该怎么解决:
我们可以一个数据一个数据地读入并执行相关操作,直到输入个数为要求的个数时再进行结果输出,缺陷就是必须输入完一组数据得重置变量

#include <stdio.h>
int main() 
{
    int max = 0, min = 100;
    int sum=0,score,count=0;
    while (scanf("%d", &score) != EOF)
    {
        if (max < score)
            max = score;
         if (min > score)
            min = score;
        sum += score;
        if (++count == 7)
            {
                printf("%.2f\n",(sum-max-min)/5.0);
                max=0;
                score=0;
                min=100;
                count=0;
                sum=0;
            }
    }
    return 0;
}

改数字

小乐乐改数字_牛客题霸_牛客网

方法一:使用pow函数

#include <stdio.h>
#include <math.h>
int main() {
    int sum = 0;
    int n;
    int i = 0;
    scanf("%d",&n);
    while(n)
    {
        int ret = n%10%2;
        if(ret==1)
        {
            sum+=1 * (int)pow(10,i);
        }
        n/=10;
        i++;
        //偶数啥也不做
    }
    printf("%d",sum);
    
    return 0;
}

 方法二,使用递归:
 

int modify(int n)
{
    if(n/10==0)
    {
        return n%2;
    }
    else {
    {
        return modify(n/10)*10 + n%2;//偶数取决于最后一位
    }
    }
}

数字三角形

按行: 

#include <stdio.h>

int main()
{
    int n = 0;
    //多组输入
    while (~scanf("%d", &n))
    {
        //控制行数
        for (int i = 1; i <= n; i++)
        {
            //打印一行
            for (int j = 1; j <= i; j++)
            {
                printf("%d ", j);
            }
            printf("\n");
        }
    }

    return 0;
}

除了按行输出,我还发现每列也有规律,于是试着自己去实现了一下:

#include <stdio.h>
#include <string.h>
int main() {
   int n;
    while(scanf("%d",&n))
  {
    int num = 1;
    int arr[n][n];//不会初始化
  // memset(arr,0,(n*n)* sizeof(int));//
   for(int i = 0;i<n;i++)//存放于数组
   {
    for(int j = i;j< n;j++)
    {
        
        arr[j][i] = num;
    }
    num++;
   }
    for (int i = 0; i < n; i++)
        {
            //打印一行
            for (int j = 0; j <= i; j++)
            {
                printf("%d ", arr[i][j]);
            }
            printf("\n");
        }
  }
}

输出不重复序列

小乐乐与序列_牛客题霸_牛客网

创建一个数组,初始化为0。将对应大小的数字放入对应的下标,然后输出非0的数组元素。

静态版本: 

#include <stdio.h>

int main() {
   int arr[100001] = {0};//初始化
   int n;
   int num;
   scanf("%d",&n);
   for(int i = 0;i<n;i++)
   {
    scanf("%d",&num);
    arr[num] = num;
   }
   for(int i = 0;i<100001;i++)
   {
   if(arr[i] !=0)
   {
    printf("%d ",arr[i]);
   }
   }
    return 0;
}

C99标准:

#include <stdio.h>

int main() {
    int n;
    scanf("%d",&n);
   int arr[n];
   memset(arr,0,n*sizeof(int));
   int num;
   for(int i = 0;i<n;i++)
   {
    scanf("%d",&num);
    arr[num-1] = num;//从0开始以便放下所有数据
   }
   for(int i = 0;i<n;i++)
   {
   if(arr[i] !=0)
   {
    printf("%d ",arr[i]);
   }
   }
    return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1104168.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【算法挨揍日记】day15——560. 和为 K 的子数组、974. 和可被 K 整除的子数组

560. 和为 K 的子数组 560. 和为 K 的子数组 题目描述&#xff1a; 给你一个整数数组 nums 和一个整数 k &#xff0c;请你统计并返回 该数组中和为 k 的连续子数组的个数 。 子数组是数组中元素的连续非空序列。 解题思路&#xff1a; 我们可以很容易想到暴力解法&#xf…

C++对象模型(11)-- 虚基类

1、虚基类的引入 我们再来复习一下“多重继承的对象布局”&#xff0c;假设继承的类结构是这样的&#xff1a; 相应的代码&#xff1a; class W { public:int i_w; }; class X : public W {}; class Y : public W {}; class Z : public X, public Y {}; 我们在main()函数中加…

BUUCTF题解之[极客大挑战 2019]EasySQL 1

1.题目分析 考查sql注入的基本使用。 1.sql注入的定义 SQL注入是一种针对Web应用程序的攻击技术&#xff0c;通过在应用程序的用户输入参数中嵌入SQL代码&#xff0c;进而攻击应用程序的数据库。 攻击者可以通过SQL注入来获取敏感信息、执行无权执行的操作、甚至完全控制数据…

tomcat的部署以及优化

tomcat的介绍 Tomcat的简介 Tomcat 是 Java 语言开发的&#xff0c;Tomcat 服务器是一个免费的开放源代码的 Web 应用服务器&#xff0c;是 Apache 软件基金会的 Jakarta 项目中的一个核心项目&#xff0c;由 Apache、Sun 和其他一些公司及个人共同开发而成。 Tomcat 属于轻量…

Go项目踩坑:go get下载超时,goFrame框架下的go项目里将vue项目的dist同步打包发布,go项目打包并压缩

Go项目踩坑&#xff1a;go get下载超时&#xff0c;goFrame框架下的go项目里将vue项目的dist同步打包发布&#xff0c;go项目打包并压缩 go get下载超时goFrame打包静态资源vue项目打包gf pack生成go文件 静态资源使用打包发布go项目交叉编译&#xff0c;省略一些不必要的信息通…

黑客利用人工智能窃取医疗数据的 7 种方式

人工智能被描述为医疗保健行业的一把双刃剑。基于人工智能的系统可以分析大量数据并在早期和可治疗的阶段检测疾病&#xff0c;它们可以比任何人类更快地诊断症状&#xff0c;并且人工智能正在帮助药物开发&#xff0c;使新的救命药物得以识别并将其推向市场速度更快且成本显着…

三集合容斥原理整理

三集合容斥原理的三个公式都是怎么被推导出来的&#xff1f; - 刘明哲的回答 - 知乎 https://www.zhihu.com/question/465008307/answer/2251909478 你必须知道的行测数量知识&#xff08;七&#xff09;容斥问题 - 跟我考公吧的文章 - 知乎 https://zhuanlan.zhihu.com/p/4271…

基于若依框架的药品管理系统

若依框架每张表共有的五个属性&#xff1a; 更改若依后端代码时创建新的module&#xff0c;选择maven&#xff0c;继承ruoyi。 创建实体类时继承BaseEntity&#xff0c;这个类有创建人&#xff0c;创建时间等五个字段&#xff0c;这个类在其它模块中&#xff0c;需要在depende…

在.Core中用EF添加数据库实体类

首先安装dotnet-ef工具&#xff0c;否则提示&#xff1a; *无法执行&#xff0c;因为找不到指定的命令或文件。 可能的原因包括: *你拼错了内置的 dotnet 命令。 *你打算执行 .NET Core 程序&#xff0c;但 dotnet-ef 不存在。 你打算运行全局工具&#xff0c;但在路径上找不到…

SNAP对Sentinel-1预处理

SNAP对Sentinel-1预处理 一、导入数据 二、轨道校正 点击run开始处理 三、噪声去除 打开S-1 Thermal Noise Removal工具 如果选中了VH&#xff0c;就只会输出一个VH极化结果 四、辐射定标 Run 五、滤波处理 六、地形校正 这边的dem需要自己下载 dem下载地址 如果一格…

Orleans的成员管理和故障检测故障检测

Orleans的成员管理和故障检测故障检测 简介 Orleans框架是一个基于.NET平台的开源分布式系统框架&#xff0c;用于开发可扩展&#xff0c;高可用&#xff0c;高性能的云服务应用程序。它采用了Actor模型&#xff0c;将分布式系统中的各个节点抽象成为Actor&#xff0c;使得开…

Linux入门---页表的理解

目录标题 第一次认识页表第二次认识页表如何看待页表页表的大致构成 第一次认识页表 我们第一次认识页表是在介绍地址空间的时候&#xff0c;我们知道操作系统将内存划分为好几个区域&#xff0c;比如说栈区&#xff0c;堆区&#xff0c;未初始化区&#xff0c;已初始化区&…

力扣刷题 day47:10-17

1.位1的个数 编写一个函数&#xff0c;输入是一个无符号整数&#xff08;以二进制串的形式&#xff09;&#xff0c;返回其二进制表达式中数字位数为 1 的个数&#xff08;也被称为汉明重量&#xff09;。 方法一&#xff1a;逐个判断 利用n&1 #方法一&#xff1a;逐个…

重载、重写(覆盖)与重定义(隐藏)

重载、重写&#xff08;覆盖&#xff09;与重定义&#xff08;隐藏&#xff09; 重载隐藏&#xff08;重定义&#xff09;多态&#xff1a;重写&#xff08;覆盖&#xff09; 三者的区别 重载 必须是在一个作用域&#xff0c;函数名相同&#xff0c;参数不同&#xff08;个数不…

C复习-基础知识

参考&#xff1a; 里科《C和指针》Bryant, Hallaron 《深入理解计算机系统》何昊&#xff0c;叶向阳《程序员面试笔试宝典》 从hello.c到可执行文件hello 在Unix系统中&#xff0c;从源文件到目标文件的转化是由编译器驱动程序完成的&#xff1a; root> gcc -o hello hel…

RTOS(4)自己的第一个FreeRTOS程序

创建两个任务 什么是任务呢&#xff1f; 对于整个单片机程序&#xff0c;我们称之为application&#xff0c;应用程序。 使用FreeRTOS时&#xff0c;我们可以在application中创建多个任务(task)&#xff0c;有些文档把任务也称为线程 (thread)。 void Task1Function(void *p…

课时4作业3

Description 某人想将手中的一张面值100元的人民币换成10元、5元、2元和1元面值的票子。要求换正好40张&#xff0c;且每种票子至少一张。问&#xff1a;有几种换法&#xff1f; Input 无输入 Output 一个数&#xff0c;表示共有多少种换法 Sample Input 1 无 Sample O…

手写一个PrattParser基本运算解析器1: 编译原理概述

点击查看 基于Swift的PrattParser项目 编译原理概述 编译原理是我们每一个程序猿必须要了解的技能, 编译原理实际上并没有啥高深的技术, 我们如果在做业务开发, 也很少会用到编译开发的知识, 但是编译原理又是我们必备的基础知识之一. 所以我们需要对编译原理的内容有一个大概的…

76.C++ STL list容器

目录 1.什么是list容器 2.list构造函数 3. 元素插⼊和删除操作 4.大小操作 5.赋值操作 6.数据存取操作 7.反转、排序 1.什么是list容器 list 是 C 标准库提供的双向链表容器。它与 vector 和 deque 不同&#xff0c;不是连续的内存块&#xff0c;而是由节点组成的链表结…

C语言——二周目——数据在内存中的存储

目录 一、整数的存储方式 二、浮点数的存储方式 一、整数的存储方式 因为CPU只有加法器&#xff0c;所以对于整型来说&#xff0c;数据在内存中通常采用补码的方式进行储存。 在这里复习一下原码、反码、补码。 正数和无符号数的原码、反码、补码相同&#xff1b; 负数的原…