初学c++遇到的问题

1 冒泡排序
将数组按从小到大或者从大到小排序
数组相邻两个数之间比较大小 ,交换位置。将最大或者最小的放在最后一个。 如 4 3 2 1 先从4 开始排序 ,将4排序完 ,再排序3,直到将所有数都排完 ,一共进行3次排序。

例:# define N 某个数
int a[N]
for (int i=0;i<N-1;i++)   //进行N-1次排序
{
   for(int t=0;t<N-1-i;t++)  // 
     {
         if(a[t]>a[t+1])     //如果大于 ,则交换位置
          {
              int tem;
               tem=a[t];
              a[t]=a[t+1];
              a[t+1]=tem;
           }
      }
}

2 数组向右移,如1 2 3 4 整体向右移动2位,被顶替的数字移动到数组最前面。 则变成 3 4 1 2

 例子:int a[100],n,m; //数组有n个数,向右移m位 
	for(int i=0;i<m;i++)   //控制向右移m位 
	{
		for(int t=n;t>0;t--) //此循环控制数组每次向右移动1位 
		{
			a[t]=a[t-1]; 
		}
	a[0]=a[n]; //移动后将溢出的位数赋值给 a[0],即第1个数 
	}
	```
3 求n以内的素数(超暴力法,后面有埃氏筛法);

for(int i=2;i<=n;i++)
{
	for(int t=2;t<=i;t++)  //测试是否是素数 
	{
		if(i%t==0&&i!=2&&i!=t)break; 
		if(i==t)   //当循环到与i相等时还没有break,则说明是素数 
		{
			b[g]=i;
			g++;
		}
	}
}

4 求n个数中的最大值或者最小值;
先将数存进数组

int max; //设置最大的数
max=[0]; //先从第一个数开始
for(int i=0;i<=n;i++)
{
	if(a[i]>max)
	{
		max=a[i];
	}
}

5 当位数过长时,求各个位数的和
可以使用char 或者string定义变量 ,再定义一个int型变量,用于将字符型转化为整数型
原理:由于字符型存储字符都是使用ASCII码来转换的,当转化为int型,相应的字符会转化为其对应的ASCII码 ;例如字符中 数字1 的ASCII码 是49;
转化为int 型时只用减去 48,即可得到整型的数字1;
例如 string a;int b;
a=“1”;
b=a-48;

6 数组行列转换

for(int i=0;i<3;i++)
	{
		for(int t=i;t<3;t++)  //这一步关键
		{
		int tem;
			tem=a[i][t];
			a[i][t]=a[t][i];
			a[t][i]=tem;
		}
	}
	```

7.埃氏筛法·

int t=0;
	int prime[1000];  //记录素数
	bool is_prime[1000];  //判断是否是素数
	memset(is_prime,true,sizeof(is_prime));  初始化
	is_prime[0]=is_prime[1]=false;
	for(int i=2;i<=n;i++)
	{
		if(is_prime[i]) 
		{
			prime[t++]=i;
			for(int j=2*i;j<=n;j+=i)  // 除去素数的倍数
			{
				is_prime[j]=false;
			}
		}
	} 

8,当数据过多时,存放的数组内,用循环一一对应。
当有连续的 A,B,C时,可以令一个字符变量等于‘A’,后面的字母用 a++

9.判断数组内的某个数 是不是什么东西时,
1.可以再定义一个bool类型的数组与其一一对应,如果对应的那个数 是什么东西,就令对应的bool类型数组为true。 例如a[1] 已经判定是某个特殊数。则令b[1]=true.
2.也可以令 已经判定为特殊数的那个数为bool类型数组的 序列名,如a[1]=20 已经判断为特殊数,则令 b[a[1]]=true;全部判断完毕后用循环将特殊数存放到另一个数组内,如

for(int i=0;i<K;i++)
   {
if(b[a[i]])
{
c[time++]=a[i];
}
   }

这种算法在特殊情况下,可以提高运行速度。
实例是 pat乙级题,1005.

#include<iostream>
#include<string.h>
using namespace std;
int main()
{	
	int K;
	int n;
	cin>>K;
	int num[110];//存放数字 
	bool is[100000];//判断是不是关键数;
	memset(is,true,sizeof(is)); 
	for(int i=0;i<K;i++) //输入数据。 
	{
		cin>>num[i];
		n=num[i];
		while(n!=1)
		{
			if(n%2==0)n=n/2;
			else n=(3*n+1)/2;
			is[n]=false;//出现的数,存在数组的序列里
		}
	}	
	int time=0;//一共time个关键数。 
	int real[100];//存关键数 
	for(int i=0;i<K;i++)
	{
		if(is[num[i]])
		real[time++]=num[i];
	}
	for(int i=0;i<time-1;i++)//排序。 
	{
		for(int t=0;t<time-i-1;t++)
		{
			if(real[t]<real[t+1])
			{
				int tem;
				tem=real[t];
				real[t]=real[t+1];
				real[t+1]=tem;
			}
		}
	}
	cout<<real[0];
	for(int i=1;i<time;i++)
	{
		cout<<" "<<real[i];
	}
	return 0;
 } 

10.查找数组中相同元素,并将相同的改成空格。

for(int i=0:i<N;i++)
{
for(int t=i+1;t<N;t++)
{
if(a[i]==a[t])a[t]=' '
}
}

11.判断素数

if(n<=0 || n==1)             //负数、0和1都不是素数
            cout<<"NO"<<endl;
        else
        {
            flag=0;
            for(i=2;i<sqrt(n);i++)
            {
                if(n%i==0)
                {
                    flag++; //
                    break;
                }
            }
            if(flag==0)
            {
                cout<<"YES"<<endl;
            }
            else
            {
                cout<<"NO"<<endl;
            }
       

12.存到数组,一起输出。

#include<iostream>
using namespace std;
int main()
{	
	int n;
	cin>>n;
	int gg[100];
	int t=0;
	while(n--)
	{	int sum=0;
		int a,b;
		cin>>a;
		for(int i=1;i<=a;i++)
		{
			cin>>b;
			sum+=b;
		}
		gg[t++]=sum;
	}
	cout<<gg[0]<<endl;
	for(int i=1;i<t;i++)
		{
			cout<<endl<<gg[i]<<endl;	 
		}
	return 0;
}

13.用函数判断素数。

bool lbj(int a)
{      if(a<=1)
		{return false;}
	else for(int i=2;i<=sqrt(a);i++)
	{
		if(a%i==0&&a>=0)
		return false;
			}
	 return true;
}

14.将某一字符串的顺序输出 。
先记录要顺序输出的字符串 每个字符的个数,再循环输出。
在这里插入图片描述
15.结构体排序,根据结构体中某个变量的值进行排序,结构体中其他东西不变。

例如 struct info
{
    int a;
    int b;
}stu[3];
stu[1].a=1;stu[1].b=1;
stu[2].a=2;stu[2].b=2;
stu[3].a=3;stu[3].b=3;
bool BIG(info g1,info g2)
{
   return g1.b>g2.b;
}
sort (stu,stu+3);

排序后结果是 stu[1].a=3;stu[1].b=3;
stu[2].a=2;stu[2].b=2
stu[3].a=1;stu[3].b=1.

猜你喜欢

转载自blog.csdn.net/qq_43394612/article/details/83963797