フォーマットと配列の動的割り当て(4344)



素数点プレースホルダのフォーマットは常に上書きされ、生活の中で忘れられます.
{:.3 f}%->小数点以下の3番目の位置にマークし、四捨五入します.
import sys

a = int(input())
for i in range(a):
    case = list(map(int, sys.stdin.readline().split()))
    avg = sum(case[1:]) / case[0]
    cnt=0
    for i in range(1, len(case)):
        if case[i] > avg:
            cnt += 1
    print("{:.3f}%".format(cnt/case[0]*100))
基本的に、Pythonはリストを動的に割り当てる問題はありません.コンパイラは、自分が受け取った値に基づいてメモリを割り当てます.CPPがvectorまたはstringを使用しない場合は、長さが固定されていない配列をポインタとして宣言する必要があります.
魔法4行:
int* arr;
int arrLen;
cin >> arrLen;
arr = new int[arrLen];
前述したように、プログラム内で配列長に基づいて生成することができる.
#include <iostream>

using namespace std;

int main() {
	int caseNum;
	cin >> caseNum;

	for (int i=0;i<caseNum;i++){
		int num;
		int* arr;
		double arrSum = 0;
		double cnt = 0;
		cin >> num;
		arr = new int[num];
		
		for (int i = 0; i < num; i++) {
			cin >> arr[i];
			arrSum += arr[i];
		}

		double avg = arrSum / num;

		for (int i = 0; i < num; i++) {
			if(arr[i] > avg)
				cnt++;
		}

		cout << fixed;
		cout.precision(3);
		cout << cnt / num * 100 << "%" <<endl;
		cout.unsetf(ios::fixed);
	}
}
同じ結果と比較した行数の違い
C++の浮動小数点設定は、固定的で正確な方法で実現でき、小数点位置に自動的に切り込むことができます.
その後usetf関数を使用してfixedを解除します.
配列長にint以外の値を追加すると、コンパイルエラーが発生する可能性があることに注意してください.(VSでは悪くないけど…)