洛谷 p1080國王遊戲 題解

2021-10-02 21:19:35 字數 3366 閱讀 4757

#include

#include

#include

#include

#include

/*p1080 國王遊戲

輸入1 大臣數n

2 國王左手數 國王右手數

3-n+2 大臣左手數 大臣右手數

輸出 獲得金幣最多的大臣獲得金幣數量

*/using

namespace std;

int king_left =

0, king_right =0;

int minister_number =0;

//int max_gold = 0;

int a_front[

10005]=

;//int mem[1005] = ;

int*max_gold =

newint

[5005];

int max_length =0;

struct minister

;vector minister_each;

///*尋找最小序列的遞迴函式*/

//void find_min()

bool

cmp(minister a, minister b)

/*大數乘法*/

intbigmul

(int

*temp_a_front,

int a_front_szie,

int left_hand)

int k =0;

while

(true)if

(temp_a_front[k]

>=10)

} k++;}

// give_a_number++;

// return temp_a_front;

return give_a_number;

}//大數除法 被除數陣列 陣列尺寸 除數

int*

bigdivid

(int

*temp_a_front,

int a_front_szie,

int divisor)

return divide_result;

}int

main()

;// bigmul(test,5,10);

// for(int i=0; i<6;i++)

///*大數除法效果測試*/

// int test[15] = ;

// auto *test_out = new int[15];

memset(test_out,0, sizeof(int)*15);

// test_out = bigdivid(test,5,2);

// for(int i=0; i<5;i++)

/*程式開始*/

/*輸入並排序主鍵*/

minister temp_minister_each =

; cin >> minister_number;

cin >> king_left >> king_right;

for(

int i =

0; i < minister_number;

++i)

sort

(minister_each.

begin()

, minister_each.

end(

), cmp)

;// /*排序演算法測試*/

// for(auto it = minister_each.begin(); it != minister_each.end(); it++)

// find_min();

///*找最大的數 需要用高精度*/

int a_number =1;

//人的號數 第乙個人是國王

int temp_length =0;

int*temp_gold =

newint

[5005];

/*初始化king_left*/

int h =0;

a_front[0]

= king_left;

//最新所有left_hand相乘後的值

while

(a_front[h]

>=10)

// cout << a_number//int count =0;

//for

(vector

::iterator it = minister_each.

begin()

; it != minister_each.

end(

); it++)//

temp_gold =

bigdivid

(a_front, a_number,

(*it)

.right_hand)

;//先除後乘

temp_length = a_number;

a_number =

bigmul

(a_front, a_number,

(*it)

.left_hand)

;// while(a_front[a_number+1] != 0)

//消除首位為零的影響

while

(temp_gold[temp_length -1]

==0)//temp數字位數大於max

if(temp_length > max_length)

max_gold = temp_gold;

//temp數字位數等於max 但大於max

}else

if(temp_length == max_length)

max_gold = temp_gold;

break;}

}}// free(temp_gold); //釋放temp_gold

//delete temp_gold;

}//cout << temp_length << " temp_length";

//cout << max_length << endl;//除錯

///*輸出*/

//max_length = max_length - 1;

for(

int i =

0; i < max_length; i++

)// cout << endl;

// cout << "a_number" << a_number << endl;

// for (int i = 0; i < a_number; i++)

return0;

}

洛谷 P1080 國王遊戲

原題 題目描述 恰逢 h 國國慶,國王邀請 n 位大臣來玩乙個有獎遊戲。首先,他讓每個大臣在左 右手上面分別寫下乙個整數,國王自己也在左 右手上各寫乙個整數。然後,讓這 n 位大臣排成一排,國王站在隊伍的最前面。排好隊後,所有的大臣都會獲得國王獎賞的若干金幣,每位大臣獲得的金幣數分別是 排在該大臣前...

洛谷P1080 國王遊戲

洛谷p1080 國王遊戲 題目描述 恰逢 h 國國慶,國王邀請 n 位大臣來玩乙個有獎遊戲。首先,他讓每個大臣在左 右手上面分別寫下乙個整數,國王自己也在左 右手上各寫乙個整數。然後,讓這 n 位大臣排成一排,國王站在隊伍的最前面。排好隊後,所有的大臣都會獲得國王獎賞的若干金幣,每位大臣獲得的金幣數...

洛谷P1080 國王遊戲

恰逢 h國國慶,國王邀請n位大臣來玩乙個有獎遊戲。首先,他讓每個大臣在左 右手上面分別寫下乙個整數,國王自己也在左 右手上各寫乙個整數。然後,讓這 n 位大臣排成一排,國王站在隊伍的最前面。排好隊後,所有的大臣都會獲得國王獎賞的若干金幣,每位大臣獲得的金幣數分別是 排在該大臣前面的所有人的左手上的數...