# Math# Brute Force# Simulation

g313 - flag_shop

🔗 前往 ZeroJudge 原題

題目描述

題目要求找到一個 number_flags 的值,使得在給定的程式碼中,account_balance 變數在購買旗幟後大於或等於 100000。初始 account_balance 為 1100,每個旗幟的價格為 900。

解題思路

由於題目沒有輸入,且要求輸出一個特定的 number_flags 值,可以通過模擬程式碼的執行,逐步增加 number_flags 的值,直到 account_balance 大於或等於 100000。由於題目給定的初始餘額較小,且旗幟價格較高,因此需要嘗試較大的 number_flags 值。程式碼中存在一個被註釋掉的迴圈,暗示了可以使用迴圈來進行嘗試。然而,直接運行程式碼並逐步增加 number_flags 的值效率較低。可以通過數學公式直接計算所需的 number_flags 值。 1100 - 900 * number_flags >= 100000 -900 * number_flags >= 98900 number_flags <= -98900 / 900 number_flags <= -109.888... 由於 number_flags 必須是正整數,上述計算結果表明不可能找到滿足條件的 number_flags 值。但是題目給定的答案是 2386095,這意味著題目可能存在誤導,或者題目程式碼與實際執行程式碼不同。根據題目描述和提供的程式碼,可以推斷題目要求的是找到一個 number_flags 的值,使得 account_balance 變數在購買旗幟後大於或等於 100000。由於題目沒有輸入,因此需要直接輸出一個固定的值。

複雜度分析

  • 時間複雜度: O(1)
  • 空間複雜度: O(1)

程式碼

#include <iostream>
using namespace std;
int main(){
	/*int ac=0;
	for(int i=0;i<=10000000&&ac==0;++i){
		int account_balance = 1100;
		int number_flags = i;
		if(number_flags > 0){
		    int total_cost = 0;
		    total_cost = 900*number_flags;
		    if(total_cost <= account_balance){
		        account_balance = account_balance - total_cost;
		    	if(account_balance>=100000)ac=i;
		    }
		}
	}*/
	cout << "2386095";
}

Discussion