回転数の実装

数値Xを適切な数値と呼び、その数値を1つずつ180度回転しても、Xとは異なる有効な数値を取得できます。各数値は回転する必要があります。

回転した後、各桁が数字のままである場合、数値は有効です.0、1、および8は回転してもそれ自体です.2と5は互いに回転できます(この場合、それらは異なる方向に回転します。言葉、2と5はお互いの鏡像です); 6と9の場合も同じですが、ローテーション後、これら以外の番号は有効な番号ではなくなります。

これで正の整数Nが得られました。Xは1からNまでのいくつの数が適切な数ですか?

例:
入力:10
出力:4
説明:
[1、10]には4つの適切な数値があります
。2、5、6、9です。1と10は回転後に変更されないため、適切な数値ではないことに注意してください。

主題分析
この問題は再帰的に解決できます。この問題を解決するときは、剰余を求める操作を使用して、単位の桁が適切な数の条件を満たすかどうかを判断します。次に、除算を使用して、10の位、100の位、または1000の位が適切かどうかを判断します数。
n%10の後で、プログラムは残りが適切な数と一致し、有効かどうかを判断します。n%10が無効で適切な数でない場合は、falseを返します。
単位の桁が有効または良い場合は、十の桁が判断され、次に千の桁が判断され、以下同様に最上位の桁まで続きます。有効な条件が満たされている場合、マーキングに使用されるブール関数はTrueに割り当てられます。最高の場所に配置し、それらの1つは良い数です。

コード

package main

import (
	"fmt"
)

func main() {
	var N int
	var answer int
	fmt.Scan(&N)
	answer=rotatedDigits(N)
	fmt.Println("Input:",N," Output:",answer)
	}
func good(n int ,flag bool) bool {
	if n == 0 {
		return  flag
	}
	d := n % 10
	switch d {
	case 3,4,7:
		return  false
		// 3,4,7不为好数且无效
	case 0,1,8:
		return good(n/10,flag) //0,1,8有效但不为好数
	}
	//2,5,6,9 为好数
	return  good(n/10,true)
}

func rotatedDigits(N int) int {
	flag := false
	answer := 0
	for i := 1 ; i <= N; i++{
		if good(i,flag){
			answer++
		}
	}
	return answer
}

結果
ここに画像の説明を挿入

元の4件の記事を公開 いいね1 訪問数91

おすすめ

転載: blog.csdn.net/qq_43337384/article/details/105633148