【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;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章