首页 > 其他分享 >分享——有趣的题目

分享——有趣的题目

时间:2024-09-04 22:54:55浏览次数:5  
标签:arr 题目 temp int 旋转 数组 有趣 分享

从今天开始我打算开启一个新的系列,这个系列主要记录我最近想起的经典的题目,刷到的有趣的题目,和一些有深度的题目,算是一个题目的收集系列。开一个新坑希望大家喜欢。


题目零:1/n的累加

难度:★★

#include <iostream>
using namespace std;
 
double gets(int n)
{
double r=0.0;
for(int i=1;i<n+1;i++)
{
r+=1.0/i;
}
return r;
}
 
int main()
{
int n;
cin>>n;
cout<<gets(n)<<endl;
return 0;
}

题目一:求两个数的最大公约数。

难度:★★

#include<iostream>
using namespace std;

int ojld(int m,int n)
{
int r=m%n;
while(r!=0)
{
m=n;
n=r;
r=m%n;
}
return n;
}

int main()
{
int m,n;
cout << "输入两个数" << endl;
cin>>m>>n;
cout << "zuidagongyueshu"<<ojld(35,25) << endl;
return 0;
}

题目二:数组左移的循环

难度:★★★★

#include <iostream>
using namespace std;

// 函数用于向左循环移位数组
void leftRotate(int arr[], int n, int d) {
    // 如果d是n的倍数,那么数组将保持不变
    if (d == 0) return;
    d = d % n; // 如果d大于n,则取模

    int temp[n]; // 用于临时存储数组

    // 先将第一部分的元素复制到temp中
    for (int i = 0; i < d; i++) {
        temp[i] = arr[n - d + i];
    }
两种方式:
    //1 然后将第二部分的元素复制到temp中,注意这里j从d开始
    for (int i = 0, j = d; i < n - d; i++, j++) {
        temp[j] = arr[i];
    }
                
    /* //2 复制剩余的元素到temp
    for (int i = d, j = 0; i < n; i++, j++) {
        temp[j] = arr[i - d];
    }
    */
    
    // 将temp中的元素复制回原数组
    for (int i = 0; i < n; i++) {
        arr[i] = temp[i];
    }
}

/*
在代码中,if (d == 0) return; 和 d = d % n; 这两行代码各自扮演着重要的角色,尤其是在处理数组旋转或任何需要周期性或循环性操作的场景中。

   if (d == 0) return;

这行代码检查变量 d(通常表示要旋转的步数或次数)是否等于 0。如果是,函数立即返回,不执行任何旋转操作。这是因为旋转 0 次意味着数组应该保持不变,所以没有必要进行任何计算或修改。这可以提高代码的效率,避免不必要的计算。

   d = d % n;

这行代码对 d 进行模 n 操作,其中 n 是数组的长度。模运算 % 的结果是 d 除以 n 的余数。这个操作有几个目的:

确保 d 的值在有效范围内:如果 d 大于或等于 n,那么实际上只需要旋转 d % n 次就能达到相同的效果。例如,如果数组有 5 个元素(n = 5),并且你想旋转 7 次(d = 7),那么实际上只需要旋转 2 次(7 % 5 = 2),因为旋转 5 次或更多次将会使数组回到原始状态。
避免无效操作:通过确保 d 的值小于 n,可以避免执行无效或多余的旋转操作。

综上所述,这两行代码在数组旋转函数中非常重要,它们确保了函数的效率和正确性。首先,它们检查是否需要执行旋转操作(d 是否为 0)。然后,它们确保旋转的次数在有效范围内(d 是否小于 n),从而避免了不必要的计算或无效操作。
*/

// 打印数组的函数
void printArray(int arr[], int size) {
    for (int i = 0; i < size; i++)
        cout << arr[i] << " ";
    cout << endl;
}

// 主函数
int main() {
    int arr[] = {1, 2, 3, 4, 5, 6, 7};
    int n = sizeof(arr) / sizeof(arr[0]);
    int d = 3; // 向左移动3个位置

    cout << "原始数组: ";
    printArray(arr, n);

    leftRotate(arr, n, d);

    cout << "向左旋转 " << d << " 次后的数组: ";
    printArray(arr, n);

    return 0;
}

题目三:冒泡排序和快速排序的计算速度比较

难度:★★★★★★

#include <iostream>
#include <ctime>
#include <cmath>
#include <cassert>
using namespace std;

void BubbleSort( int *r , int n ) ; 
void QuickSort(int *data , int first, int last);
int Partition( int *data, int first, int last );
int *generateRadomArray(int n , int rangeL , int rangeR);

int main()
{
	int i = 4;            
	int n = pow(10,i);                  //待排序的数据规模
	
	clock_t startTime, endTime;
	int *arr = generateRadomArray(n,0,n);
	startTime = clock();
	BubbleSort( arr , n );
	endTime = clock();
	cout << "data size: " << n << endl;
	cout << "Time cost: " << double(endTime-startTime)/CLOCKS_PER_SEC << "s" << endl; 

	startTime = clock();
	QuickSort( arr, 0, n-1 );
	endTime = clock();
	cout << "data size: " << n << endl;
	cout << "Time cost: " << double(endTime-startTime)/CLOCKS_PER_SEC << "s" << endl;   

	delete[] arr;	
	return 0;
}

void BubbleSort( int *r , int n ) 
{	
	int temp, bound, exchange = n-1;
	while( exchange != 0)
	{
		bound = exchange;
		exchange = 0;
		for( int j = 0; j < bound; j++ )  //排序区间[1,bound] 
			if(r[j] > r[j+1])
			{
				temp = r[j]; r[j] = r[j+1];	r[j+1] = temp;
				exchange = j; 
			}
	}
}
	
int Partition( int *data, int first, int last )
{
	int i = first, j = last, temp;              //初始化一次划分的区间
	while (i < j)	
	{
		while (i < j && data[i] <= data[j]) 
			j--;      //右侧扫描
		if (i < j) { 
			temp = data[i];	data[i] = data[j]; data[j] = temp; 
			i++; 
		}
		while (i < j && data[i] <= data[j]) 
			i++;     //左侧扫描
		if (i < j) {
			temp = data[i]; data[i] = data[j]; data[j] = temp;  
			j--; 
		}
	}
	return i;           // i为轴值记录的最终位置
}
	
void QuickSort(int *data , int first, int last)
{	
	if (first >= last) 
  		return;                            //区间长度为1,递归结束
	else 
	{
		int pivot = Partition(data, first, last);     //一次划分
		QuickSort(data, first, pivot-1);         //对左侧子序列进行快速排序
		QuickSort(data, pivot+1, last);         //对右侧子序列进行快速排序	
	}
}

int *generateRadomArray(int n , int rangeL , int rangeR) 
{
	assert( n > 0 && rangeL <= rangeR );     	//断言处理 
	int *arr = new int[n];                      //数据规模为n
	srand(time(NULL));
	for(int i = 0 ; i < n ; i++ )
	{
		arr[i] = rand() % (rangeR - rangeL + 1) + rangeL;
	}	
	return arr;
}

以上的四个题目就是我最近遇到的有趣的题目和我刚开始不会的题目,都分享在这,尤其是前两个题目算是经典的问题了。本周之内我会发一篇解析,进行一个简单的分析和解释。

感谢大家阅读,如果大家喜欢这个系列麻烦大家多多点赞加关注,感谢大家。

标签:arr,题目,temp,int,旋转,数组,有趣,分享
From: https://blog.csdn.net/2301_81280642/article/details/141906060

相关文章

  • 民宿酒店管理系统springboot+vue功能解析与分享
    民宿酒店管理系统springboot+vue功能解析与分享技术架构前后端分离:前端与后台分开部署,Java后台主要提供RestfulAPI,前端使用Vue响应式框架搭建,前后端以JSON格式进行数据交互。后台:SpringBoot+SpringAOP+MyBatisPlus(兼容Mybatis)后台构建工具:MavenJVM版本:J......
  • 爬虫转型测试的心得分享
    一:那些爬虫知识可以留下,在测试中进行使用1、请求方式-请求头-响应头get请求与post请求的理解:最大的区别在于:get请求的参数跟在url地址后,而post请求需要提交参数表单在浏览器的开发者工具中的负载下的参数,就是post请求需要的参数信息2、请求头这些内容需要理解这些是......
  • JSP教育分享系统705bw程序+源码+数据库+调试部署+开发环境
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表系统功能:学生,实验分类,实验系统,资源类型,资源信息,精品课堂,课程分类,课堂笔记,提交实验,实验批改,通知信息技术要求:开发语言:JSP前端使用:HTML5,CSS,JSP动态......
  • 从初识Redis到精通Redis,一份Java程序员必备Redis实战文档分享
    本文深入浅出的介绍了Redis的五种数据类型,并通过多个实用示例展示了Redis的用法。除此之外还讲述了Redis的优化方法和扩展方法。一共由三个部分组成,第一部分对Redis进行了介绍,说明了Redis的基本使用方法、它拥有的5种数据结构以及操作5种数据结构的命令,并详解了如何使用R......
  • 分享基于PDF.JS的移动端PDF阅读器代码
    一、前言在之前的文章《分享基于PDF.js的pdf阅读器代码》里提到了PC端基于PDF.js的阅读器,本文将提供针对移动端的版本。二、pdfViewer为了能够直接使用,这里分享一下经过简单修改后能直接使用的pdfViewer代码:pdfViewer代码目录(pdfViewer代码包本文查看附件):以Vue工程为......
  • 今日分享——stream流和方法引用
    1.不可变集合1.1什么是不可变集合是一个长度不可变,内容也无法修改的集合1.2使用场景如果某个数据不能被修改,把它防御性地拷贝到不可变集合中是个很好的实践。当集合对象被不可信的库调用时,不可变形式是安全的。简单理解:不想让别人修改集合中的内容比如说:1,斗......
  • 书籍分享
    Skiptocontent NavigationMenu Product Solutions Resources OpenSource Enterprise Pricing  SigninSignup  lTbgykio/Books-Free-BooksPublicNotificationsFork 1k Star 9.5k CodePullrequests......
  • 扬子江保险经纪有限公司分享诉责险优势
    扬子江保险经纪有限公司于2003年11月经原中国保险监督管理委员会批准在北京注册成立,2015开始深耕诉责险领域,在责任险具有较高的专业水平。扬子江保险经纪为中国大陆、中国香港、法国、土耳其及加纳等海内外数千家企业提供高品质的人身险、财产险、信用险、责任险、货运险、......
  • 基于SpringBoot美食分享管理系统的设计和实现(源码+LW+部署讲解)
     目录:完整视频演示:系统架构:程序运行截图:核心代码参考:   数据库sql:项目技术介绍:java介绍:Mysql数据库介绍:为什么选择我:获取源码:......
  • 2024最新Java面试笔试题目分享
    1.java中IO流分为几种?字节流:InputStream、OutputStream字符流:Reader、Writer字节流是最基本的1.字节流可用于任何类型的对象,包括二进制对象,而字符流只能处理字符或者字符串;2.字节流提供了处理任何类型的IO操作的功能,但它不能直接处理Unicode字符,而字符流就可以。......