【C++】作业中的一些琐碎知识

函数:判断是否为素数

bool is_prime(int num)
{
	int i;
    int s=sqrt(num);
	for(i=2;i<=s;i++)
	{
		if(num%i==0) return false;
	}
	return true;
}

函数:计算num的因子和

因子概念:假如整数n除以m,结果是无余数的整数,那么我们称m就是n的因子。反过来说,我们称n为m的倍数

其中因子和为包括1但不包括n本身的所有因子之和

int fac_sum(int num)
{
	int i,ans=0;
	for(i=1;i<num;i++)
	{
		if(num%i==0) ans+=i;
	}
	return ans;
}

函数:判断回文数的两种写法

//将回文数看作整形数据(在这里010就是10,10不是回文数)
bool is_palindromic(int num)
{
	int ans=0,copy=num;
	while(copy)
	{
		ans*=10;
		ans+=copy%10;
		copy/=10;
	}
	return ans==num?true:false;
}
//将回文数看作字符串(这样的话010也是回文数)
bool is_palindromic(string s)
{
	int l=0,r=s.length()-1;
	while(l<=r)
	{
		if(s[l++]==s[r--]) continue;
		else return false;
	}
	return true;
}

过程设计:数组的去重复制

将含有nx个元素的数组x中的数据复制到数组y中,重复的数据只存储一次,最后输出y中的数据。(两种思路)

//思路一:比较笨的,挨个遍历查重
int main()
{
	int x[50],y[50],ny=0,nx;
	bool flag;
	cin >> nx;
	for(int i=0;i<nx;i++) cin >> x[i];
	for(int i=0;i<nx;i++)
	{
		flag = true;
		for(int j=0;j<ny;j++) if(x[i]==y[j]) flag = false;
		if(flag) y[ny++]=x[i];
		else continue;
	}
	for(int i=0;i<ny;i++) cout << y[i]<< " ";
	return 0;
}
//思路二:用桶来存储数据的存在性,效率高,但是范围比较小。
int main()
{
	const int MAXSIZE = 300000;
	int x[50],y[50],ny=0,nx;
	bool flag[MAXSIZE] = {false};
	cin >> nx;
	for(int i=0;i<nx;i++)
	{
		cin >> x[i];
		flag[x[i]]=true;
	}
	for(int i=0;i<nx;i++)
	{
		if(flag[x[i]]==true)
		{
			y[ny++] = x[i];
			flag[x[i]]=false;
		}
		else continue;
	}
	for(int i=0;i<ny;i++) cout << y[i] << " ";
	
	return 0;
}

函数:利用二维的指针遍历二维数组

void fun2(int (*p)[4],int n,int m)
{
	for(int i=0;i<n;i++)
	{
		for(int j=0;j<m;j++)
		{
			cout << p[i][j] << " ";
		}
		cout << endl;
	}		
}
int main()
{
	int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};
	fun2(a,3,4);
	return 0;
}
发布了38 篇原创文章 · 获赞 4 · 访问量 1632

猜你喜欢

转载自blog.csdn.net/qq_15989473/article/details/103995798