物联网项目 numpy Java包装类 log4j iphone bash list sorting rspec vue开发教程 vue添加class access教学视频 查看kafka消费情况 mysql删除一列 spark大数据处理技术 pcm接口 office配置进度 安装python教程 python安装mysql python开发环境 python安装环境变量 java获取当前月份 java的for循环 java怎么获取当前时间 java接口调用 java日期格式 xp画图工具 圣骑士装备 popen 端口关闭工具 dvwa安装教程 java核心技术 backtrack3 win10有哪些版本 中维高清监控系统安装 pr视频加速 js文件上传 关闭页面 抠图教程 winhex中文版下载
当前位置: 首页 > 学习教程  > 编程语言

笔试三

2021/1/28 22:59:53 文章标签:

简单编程 有一个数组a[1000]存放0–1000;要求每隔二个数删掉一个数,到末尾时循环至开头继续进行,求最后一个被删掉的数的原始下标位置。以7个数为例:{0,1,2,3,4,5,6,7} 0–>1–>2(删除)–>3–>4–>5(删…

简单编程 有一个数组a[1000]存放0–1000;要求每隔二个数删掉一个数,到末尾时循环至开头继续进行,求最后一个被删掉的数的原始下标位置。以7个数为例:{0,1,2,3,4,5,6,7} 0–>1–>2(删除)–>3–>4–>5(删除)–>6–>7–>0(删除),如此循环直到最后一个数被删除。

简单约瑟夫环(注意:个人觉得题目有问题,0-7是8个数,但是题目写7个数)
以下是数组实现,数组实现有一种较好理解,就是没第三个就删除(后面的一次往前移一个)但是此方法当数量大时,像这道题有1000个数,就太过慢了
以下是不移动的数组方法

#include <iostream>
using namespace std;
int a[1000];
int main()
{
    int n;
    cin>>n;
    n++;//为了满足题意,输入7就是0-7一共8个数
    for(int i=0;i<n;i++)
    {
        a[i]=i;
    }
    int result=0 ,time=0;
    int rel=-1;
    while(time!=n)
    {
    //第一层while循环,找出两个不为-1的数
        while(result!=3)
        {
            if(a[rel]==-1)
            {
                rel = (rel+1)%n;
            }
            else
            {
                rel = (rel+1)%(n);
                ++result;
            }
        }
        //第二个while循环是为了避免两个不为-1的数后面接着-1;
        while(a[rel]==-1)
        {
            rel = (rel+1)%n;
        }
        //将第三个数置为-1,将result置1;
        a[rel]=-1;
        time++;
        result=1;
        //打印现在数组内的数
        for(int i=0;i<n;i++)
        {
            cout<<a[i]<<" ";
        }
        cout<<"------"<<endl;
    }
    
    cout<<rel;
    return 0;
}

已知两个链表head1和head2各自有序,请把他们合并成一个链表一人有序

不用递归实现(更好理解),仅为理论可行,没有测试过

Node* Merge(Node* head1,Node* head2)
{
	Node* head;
	Node* ptr;
	if(head1->data<head2->data)
	{
		head = head1;
		head1=head1->next;
	}else
	{
		head = head2;
		head2=head2->next;
	}
	head->next=ptr;
	while(head1->next!=NULL||head2->next!=NULL)
	{
		if(head1->data<head2->data)
		{
			ptr->next=head1;
			ptr=head1;
			head1=head1->next;
		}else
		{
			ptr->next=head2;
			ptr=head2;
			head2=head2->next;
		}
	}
	if(head1->next==NULL)
	{
		ptr->next=head2;
	}else
	{
		ptr->next=head1;	
	}
	return head;
}

递归实现也没有测试过

Node* Merge(Node* head1,Node* head2)
{
	if(head1==NULL)
	{
	return head2;
	}
	if(head2==NULL)
	{
	return head1;
	}
	Node *head;
	if ( head1->data < head2->data )
	{
		head=head1;
		head->next=Merge(head1->next,head2);
	}else
	{
		head=head2;
		head->next=Merge(head1,head2->next);
	}
	return head;
}

题目要求:使用二分查找法,查找出第一个大于或等于某个数的下标。例如:int[]a = {1,2,2,2,4,8,10},查找2,返回第一个2的下标1,查找3返回4的下标4,查找4返回4的下标4,如果没有则返回-1.

#include <iostream>
#include <cstring>
using namespace std;
int a[1000];
//参数解释:1、数组 2、最左3、最有4、目标5、数组最大值的下标
int Half_Find(int* a,int left,int right,int target,int Max)
{
    if(target>a[Max])
    {
        return -1;
    }
    int mid=(left+right)/2;
    if(left>right)
    {
        return left;
    }
    if(a[mid]<target)
    {
        Half_Find(a,mid+1,right,target,Max);
    }else{
        Half_Find(a,left,mid-1,target,Max);
    }

}

int main()
{
    int a[] = {1,2,2,2,4,8,10};
    //得到数组有几个值;
    int b = sizeof(a)/sizeof(int);
    cout<<Half_Find(a,0,b-1,11,b-1);
    return 0;
}

本文链接: http://www.dtmao.cc/news_show_650124.shtml

附件下载

相关教程

    暂无相关的数据...

共有条评论 网友评论

验证码: 看不清楚?