犯二的程度


犯二的程度

任務描述

本關任務:編寫函數 silly,計算整數(不多於100100位)犯二的程度並返回。

數字也可以“犯二”,一個整數“犯二的程度”定義為:該數字中包含22的個數與其位數的比值,如果這個整數是負數,則程度增加0.50.5倍,如果還是個偶數,則再增加11倍。

例如,數字-56782223456−56782223456是個1111位數,其中有33個22,是負數,也是偶數,則它的犯二程度為:3/11×1.5×2,約為0.8181820.818182。

編程要求

在右側編輯器中的Begin-End之間補充代碼,計算整數(不多於100100位,數據由平台提供)犯二的程度並返回。具體“犯二的程度”定義如下:

  1. 該數字中包含 2 的個數與其位數的比值;
  2. 如果整數是負數,則程度增加 0.5 倍;
  3. 如果整數是偶數,則再增加 1 倍。

測試樣例

測試輸入:-13142223336

預期輸出:0.818182

測試輸入:122335468912334612

預期輸出:0.444444

源代碼

#include <iostream>
using namespace std;

// 函數silly:計算數值有多二
// 參數:a-存儲數值的字符數組,以'\0'結束,所以不需要另一個參數告訴函數數組有多長
// 返回值:數值犯二的程度
double silly(char a[]);

int main()
{
    char s[102];     // 定義存儲數值的數組
    cin >> s;     // 輸入不超過位的整數
    double sy = silly(s);     // 計算犯二的程度
    cout << sy << endl;     // 輸出犯二的程度
    return 0;
}

double silly(char a[])
{
    // 請在此添加代碼,實現函數silly
    /********** Begin *********/
	int i,len,count_2=0,judge_np,judge_even;
	double result;
	//手動計算字符串長度
	i=0;
	while(a[i]!='\0')i++;
	len = i;
    //統計有幾個2
    for(i=0;i<len;i++){
		if(a[i]=='2'){
			count_2++;
		}
	}
	//判斷是否是負數
    if(a[0]=='-'){
		judge_np=1;
	}else{
		judge_np=0;
	}
	//判斷是否是偶數
	if(a[len-1]%2==0){
		judge_even=1;
	}else{
		judge_even=0;
	}
//	cout<<"字符串:"<<a<<endl;
//	cout<<"是否是負數"<<judge_np<<endl;
//	cout<<"是否是偶數"<<judge_even<<endl;
//	cout<<"有幾個2"<<count_2<<endl;
//	cout<<"長度"<<len<<endl;
	//計算結果
	if(judge_np)len--;
	result = 1.0*count_2/len;
	if(judge_np)result*=1.5;
	if(judge_even)result*=2;
	return result;
    /********** End **********/
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM