[質問の解決策] CSP-番号を報告する

記事のディレクトリ


トピックリンク

アルゴリズムのアイデア

A、B、C、およびDにはそれぞれ0、1、2、および3の番号が付けられ、モジュロ演算を使用して、A、B、C、またはDの人物を記録します。要件を満たすためにスキップされた場合、n++この時間を表すために使用することは、報告された数に含まれません。報告される数値については、モジュロ演算を使用して各桁を取得します。

//第五次实验 5.
#include<iostream>
using namespace std;

int n, person = 0;
int jump[4] = {}; //四人跳过的次数; 甲,乙,丙,丁:0, 1, 2, 3

bool jump_over(int x);

int main()
{
	int i;
	scanf("%d", &n);
	for ( i = 1; i <= n; i++)
	{
		if (jump_over(i)) //跳过
		{
			jump[person]++;
			n++;//这次不算
		}
		person++;
		person = person % 4;
	}
	for ( i = 0; i < 4; i++)
	{
		printf("%d\n", jump[i]);
	}
	
	return 0;
}

bool jump_over(int x) //是否跳过
{
	//是 7 的倍数
	if (x == (x / 7) * 7)
	{
		return true;
	}
	//含有 7
	while (x)
	{
		if (x % 10 == 7) // x 的个位数
		{
			return true;
		}
		x = x / 10;
	}
	return false;
}

結果分析

スコアは100ポイント、時間は0ミリ秒、スペースは2.941MB、時間計算量はO(n)です。

おすすめ

転載: blog.csdn.net/weixin_44092088/article/details/110285605