常见面试程序题

1、 给定排好序的数组A(从小到大),大小为n,现在给定数X,插入到给定的数组A中,保持排序(二分法)。

主要考察二分法。

#include "stdafx.h"
#include <iostream>

using namespace std;
#define Max 10
int BinaryFind(int a[],int n,int insertNum);

int _tmain(int argc, _TCHAR* argv[])
{
	int a[Max]={1,2,3,4,5,8,10};
	int insertNum=6;
	int pos=BinaryFind(a,7,insertNum);
	
	for(int i=7-1;i>=pos;i--)
		a[i+1]=a[i];

	a[pos]=insertNum;

	system("pause");
	return 0;
}

//二分法查找要插入的位置  a数组是从小到大的有序数组
int BinaryFind(int a[],int n,int insertNum)
{
	int left=0;
	int right=n-1;
	int mid;
	while(left<right)
	{
		mid=left+(right-left)/2;

		if(a[mid]>insertNum)
		{
			right=mid-1;
		}
		else if(a[mid]<insertNum)
		{
			left=mid+1;
		}
		else
		{
			return mid;
		}

	}
	return mid;
}


 

2. 写一个栈的实现,并将1-10入栈和出栈

#include "stdafx.h"
#include <iostream>

using namespace std;
#define Max 100

typedef struct stack
{
	int data[Max];
	int top; //栈顶指针
}Seqtack,*SStack;

void InitStack(SStack s);
void Push(SStack s,int data);
int Pop(SStack s);


int _tmain(int argc, _TCHAR* argv[])
{

	SStack s;
	s=(SStack)malloc(sizeof(Seqtack));
	InitStack(s);
	for(int i=1;i<=10;i++)
	{
		Push(s,i);
	}
	
	for(int i=0;i<10;i++)
	{
		int t=Pop(s);
		cout<<t<<"  ";
	}
	system("pause");
	return 0;
}


//初始化顺序栈
void InitStack(SStack s)
{
	s->top=-1;
}

//入栈
void Push(SStack s,int data)
{
	//判断栈是否已满
	if(s->top>=Max-1)
	{
		cout<<"栈满,不能入栈!"<<endl;
		exit(-1);
	}
	else
	{
		s->data[++s->top]=data;
	}
}

//出栈
int Pop(SStack s)
{
	//判断是否为空
	if(-1==s->top)
	{
		cout<<"为空栈,不能出栈!"<<endl;
		exit(-1);
	}
	else
	{
		int temp=s->data[s->top--];
		return temp;
	}
}


 

3.编写一个函数,要求输入年月日时分秒,输出下一秒的时间。

#include "stdafx.h"
#include  <iostream>

using namespace std;
void AddSecond(int sec);
int Time[6]; //Time[0]—Time[5]依次表示年、月、日、时、分、秒       24 60 60 
int MonthDay[]={31,28,31,30,31,30,31,31,30,31,30,31}; //12月中每月的天数  为平年
int _tmain(int argc, _TCHAR* argv[])
{
	for(int i=0;i<6;i++)
	{
		cin>>Time[i];
	}
	AddSecond(1);
	for(int i=0;i<6;i++)
	{
		cout<<Time[i]<<" ";
	}
	system("pause");
	return 0;
}

void AddSecond(int sec)
{
	if((Time[0]%400==0)||((Time[0]%4==0)&&(Time[0]%100!=0))) //如果为闰年
	{
		MonthDay[1]=29;
	}
	else   //为平年
	{
		MonthDay[1]=28;
	}
	int n=sec;
	int m=0;

	 //秒
		Time[5]+=n;
		n=Time[5]/60;
		m=Time[5]%60;
		Time[5]=m;
    //分
		Time[4]+=n;
		n=Time[4]/60;
		m=Time[4]%60;
		Time[4]=m;
	//时
	    Time[3]+=n;
		n=Time[3]/24;
		m=Time[3]%24;
		Time[3]=m;
	//天
	    Time[2]+=n;
		n=Time[2]/MonthDay[Time[1]];
		m=Time[2]%MonthDay[Time[1]];
		Time[2]=m;
	//月
		Time[1]+=n;
		n=Time[1]/12;
		m=Time[1]%12;
		Time[1]=m;
	//年
		Time[0]+=n;
}

 

参考来源: lunchenqun http://blog.csdn.net/luchenqun/article/details/6554005
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值