【C++】實驗三 函數


實踐題1

【問題描述】編寫具有如下原型的函數:bool f(long x);其功能爲:若整數 x 僅由偶數字(0、2、4、6、8)組成時(如 x=26480),函數返回 true,否則返回 false(如當 x=22034 時)。並編制主函數對它進行調用。

【輸入形式】只能是一個整數數字,中間不能有空格等其他字符;
【輸出形式】只輸出true或者false,後面不要換行。
【樣例輸入】26480
【樣例輸出】true
【樣例說明】輸入輸出時不要帶有其他說明文字或符號

#include<iostream>
using namespace std;
bool f(long x)
{
	int temp;
	bool flag = true;
	while(x/10!=0)
	{
		temp=x%10;
		if(temp%2!=0) return !flag;
		x/=10;
	}
	if(x%2!=0) return !flag;
	return flag;
}
int main()
{
	long a;
	cin >> a;
	if(f(a)) cout << "true";
	else cout << "false";
	return 0;
}


實踐題2

【問題描述】編寫具有如下原型的函數:void find(int i, int n); 實現從 i 開始找起,連續找出 n 個素數並顯示在屏幕上。如:實參爲10 和 8 後,輸出的 8 個素數應爲:11,13,17,19,23,29,31,37。

【輸入形式】輸入兩個整數,前一個是查找的起始數字,後一個是指定查找幾個素數;
【輸出形式】輸出指定數量的素數,每個素數後面加一個空格作爲分隔符,最後一個數字後面可以有一個空格,但不需要換行。
【樣例輸入】13 4
【樣例輸出】13 17 19 23
【樣例說明】輸出結果中除了題目中說明的空格,不要加其他文字和符號。

#include<iostream>
#include<cmath>
using namespace std;
int is_prime(int n)
{
    int j = 0;
    for (j = 2; j <=sqrt (n); j++)
    {
        if (n%j == 0)
        {
            return 0; 
        }
    }
    return 1;
}
void find(int i,int n)
{
	while(n)
	{
		if(is_prime(i))
		{
			cout << i << " ";
			n--;
			i++;
		}
		else i++;
	}
}

int main()
{
	int a,b;
	cin >> a >> b;
	find(a,b);
	return 0;
}

實踐題3

【問題描述】輸入正整數start和end,找出從start到end這一區間段內哪一個數n的因子和最大,並將該n及其因子和maxSum作爲結果輸出。例如,當start=10,end=15時,所求的n應該爲12,而maxSum應該爲16。

要求:設計函數計算n的因子和,其中因子和爲包括1但不包括n本身的所有因子之和。

【輸入形式】兩個整數,用來指定查找的起始數字和結束數字;
【輸出形式】兩個整數,中間用一個空格隔開,前一個是因子和最大的數字,後一個是因子和,最後一個數字後面不要有空格和換行。
【樣例輸入】10 15
【樣例輸出】12 16
【樣例說明】輸出不要有多餘的空格和換行。

#include<iostream>
using namespace std;
int yin_sum(int n)
{
	int sum=0;
	for(int i=1;i<n;i++)
		if(n%i==0)
			sum+=i;
	return sum;
}
int main()
{
	int start,end,maxsum=-1,temp,aim=0;
	cin >> start >> end;
	for(int i=start;i<=end;i++)
	{
		temp=yin_sum(i);
		if(temp > maxsum) 
		{
			maxsum=temp;
			aim=i;
		}
	}
	cout << aim << " " << maxsum;
	return 0;
}

實踐題4

在這裏插入圖片描述

#include<iostream>
#include<cmath>
using namespace std;
bool is_hui(long n)
{
	int copy=0;
	int num=n;
	while(num>0)
	{
		copy=copy*10+num%10;
		num/=10;
	}
	return (n==copy?1:0);
}

int main()
{
	int n;
	cin >> n;
	for(int i=1;i<=n;i++)
		if(is_hui(i)&&is_hui(i*7)&&is_hui(i*i*3))cout << i << " ";

	return 0;
}

實踐題5

【問題描述】鍵盤輸入正整數 n,求出n與其反序數x之和並輸出。例如,輸入2038,n+x = 2038 +8302 =10340,輸出應爲10340。要求:編寫函數實現數據轉換成反序數值。

【輸入形式】輸入一個整數;
【輸出形式】輸出一個整數;
【樣例輸入】2038
【樣例輸出】10340
【樣例說明】不要任何輸入輸出的文字提示。

#include<iostream>
#include<cmath>
using namespace std;
int fun(int n)
{
	int ans=0;
	while(n>0)
	{
		ans=ans*10+n%10;
		n/=10;
	}
	return ans;
} 
int main()
{
	int n;
	cin >> n;
	cout << fun(n)+n;
	return 0;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章