STL,sort排序,栈和递归,以及汉诺塔问题

版权声明:小牛牛的奋斗 https://blog.csdn.net/qq_43590403/article/details/88755945

仅供参考:

#include <iostream>
#include <cstdio>
#include <string>
#include <vector>//数组
#include <set>//集合
#include <map>//映射
#include <utility>//包含map中的make_pair()函数
#include <algorithm>//包含sort排序
#include <stack>
using namespace std;

stack<int> s[3];
void move(int a,int b)
{
	int temp=s[a].top();
	s[a].pop();
	s[b].push(temp);
	
	cout<<a<<"->"<<b<<endl;
}
void han(int A,int B,int C,int n)
{
	if(n==1)
	{
		move(A,C);
		return;
	}
	han(A,C,B,n-1);
	move(A,C);
	han(B,A,C,n-1);
}
typedef long long ll;
ll f(int n)//n的阶乘
{
	if(n<=1)
	{
		return 1;
	}
	return n*f(n-1);
}
int fib(int n)//斐波那契数列//1,1,2,3,5,8
{
	if(n==1||n==2)
		return 1;
	return fib(n-1)+fib(n-2);
}

struct Student
{
	string name;
	int age;
};
int main()
{
/*******************VECTOR********************/

	int n=10,m=10,i,j;
	vector<vector<int> > arrs(n,vector<int>(m,0));//n行m列的二维数组
	vector<vector<int> > arr;//二维数组 使用需初始化第一维度
	for(i=0;i<n;i++)
	{
		vector<int> x(i+1,1);
		arr.push_back(x);
	}
	for(i=0;i<n;i++)
	{
		for(j=0;j<arr[i].size();j++)
		{
			cout<<arr[i][j]<<" ";
		}
		cout<<endl;
	}

	vector<int> temp(n);//两种初始化  第二个参数默认为零
	vector<int> temp2(n,5);

	vector<Student> class1;//存放结构体
	Student stu1,stu2;
	stu1.name="jsdokl";
	stu1.age=45;
	stu2.name="sjdf";
	stu2.age=34;
	class1.push_back(stu1);
	class1.push_back(stu1);

	vector<int> vec;
	vec.push_back(3);//尾部插入
	vec.push_back(5);
	vec.push_back(1);
	vec[0]=4;//可直接手改
	vec.pop_back();//尾部删除
	for(i=0;i<vec.size();i++)//取长度
	{
		cout<<vec[i]<<endl;
	}

	vector<vector<int> > dd;
	for(i=0;i<9;i++)
	{
		dd.push_back(vector<int>());//初始化
	}
	for(i=0;i<9;i++)//九九乘法表
	{
		for(j=0;j<=i;j++)
		{
			dd[i].push_back((i+1)*(j+1));
		}
	}
	for(i=0;i<dd.size();i++)
	{
		for(j=0;j<dd[i].size();j++)
		{
			cout<<i+1<<"*"<<j+1<<"="<<dd[i][j]<<'\t';
		}
		cout<<endl;
	}
	class1.clear();//清空数据,内存还在

/*******************SET********************/

	set<string> name;
	name.insert("dshfl");//插入
	name.insert("dklv");
	name.insert("sovj");
	name.erase("sovj");//删除
	if(name.count("dklv"))//查找 返回1,0
	{
		cout<<"dklv is live!"<<endl;
	}
	for(set<string>::iterator it=name.begin();it!=name.end();it++)
	{
		cout<<*it<<endl;
	}
	name.clear();//清空set内存
	cout<<name.size()<<endl;//获取元素个数
	
/*******************MAP***********************/

	map<string,int> s;
	s.insert(make_pair("niuge",3));//第一种插入
	s["chenl"]=1;//第二种插入
	s["dsjfkl"]=2;
	s["sldkjf"]=2;
	if(s.count("chenl"))//查找
	{
		cout<<"chenl is live!"<<endl;
		s["chenl"]=3;
	}
	for(map<string,int>::iterator it=s.begin();it!=s.end();it++)
	{
		cout<<it->first<<" "<<it->second<<endl;
	}
	s.clear();

/*******************SORT排序***********************/

	int i;
	int arr[]={9,4,2,7,2,7,2,5,3,6};
	sort(arr,arr+10);//小到大
	for(i=0;i<10;i++)
	{
		cout<<arr[i]<<" ";
	}
	cout<<endl;
	sort(arr,arr+10,greater<int>());//大到小
	for(i=0;i<10;i++)
	{
		cout<<arr[i]<<" ";
	}
	cout<<endl;

/*******************栈***********************/

	stack<string> name;
	name.push("slkf");//压入栈底
	name.push("jlksdf");
	name.push("skfdj");
	name.push("s");
	name.push("sdjl");
	while(!name.empty())//判断是否为空  bool类型
	{
		cout<<name.size();
		cout<<name.top()<<endl;//输出栈顶
		name.pop();//栈顶下移
	}
	cout<<name.size();

/*******************递归***********************/	
//递归问题解决重复子问题

	//ll a=4038509223897348975;
	//cout<<f(10)<<endl;
	//cout<<fib(4)<<endl;
	//printf("%I64d\n",a);//long long 输出
	//printf("%lld\n",a);
	//cout<<a<<endl;
	/*汉诺塔问题*/
	int n;
	cin>>n;
	for(int i=n;i>=1;i--)
	{
		s[0].push(i);
	}
	han(0,1,2,n);
	while(!s[2].empty())
	{
		cout<<s[2].top()<<" ";
		s[2].pop();
	}
    return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_43590403/article/details/88755945
今日推荐