C\#재 귀 알고리즘 의 사격 알고리즘 분석
분석:
1)매번 과녁 을 쏠 때마다 가능 한 득점 범 위 는 무엇 입 니까?
과녁 에 10 개의 고리 가 있 으 면 명중 할 때 점 수 는 1-10 이 고 만약 에 명중 하지 못 하면 0 이 되 기 때문에 매번 사격 할 때마다 득점 하 는 범 위 는 0-10 이 고 모두 11 중 이 가능 하 다.
2)몇 가지 가장 직접적인 방법 이 있 는 지 계산한다.
10 번 의 과녁 을 쏘 고,각각 10 번 의 사격 과정 을 기록 하여,순환 으로 완성 하 다.
for(int i1=0;i1<=10;i++)
{
for(int i2=0;i2<=10;i2++)
{
for(int i3=0;i3<=10;i3++)
{
---
for(int i10=0;i10<=10;i10++)
{
if(i1+i2+i3+……+i10=90)
{
//
}
}
---
}
}
}
그러나 이렇게 하 는 것 은 두 가지 부족 하 다.1)제목 이 1000 발 을 연달아 쏘 는 것 으로 바 뀌 면 900 점 을 받 을 가능성 이 있다.
2)사려 깊 지 못 하 다.만약 에 첫 번 째 사격 점수 가 0 이 고 9 번 의 기회 가 있다 면 이 9 번 의 기 회 는 모두 만점 을 요구한다.만약 에 두 번 째 총 이 10 이 아니라면 세 번 째 총 은 쏘 지 않 아 도 가능성 이 없 을 것 이라는 것 을 알 수 있다.예 를 들 어 탁구 경기 처럼 5 세트 3 승제 가 3 세트 를 모두 혼자 이 겼 다 면 경 기 는 이때 끝 날 수 있다.계속 하 는 것 은 시간 과 정력 을 낭비 하 는 것 이다.
제 귀 적 인 방법 을 채택 하여 상술 한 문 제 를 해결 하 다
첫 번 째 는 스스로 자신 을 조절 하 는 것 이다.만약 에 제한 을 끝내 지 않 았 다 면 첫 번 째 효 과 는 dead loop 과 같 았 을 것 이다.그러나 첫 번 째 정상 적 인 상황 에서 끝 표지 가 있 고 첫 번 째 의 미 는 순환 층수 가 명확 하지 않 거나 층수 가 명확 하지 않 지만 수치 가 매우 큰 상황 을 완성 하 는 데 있다.그것 을 사용 하 는 주의 점 은 바로 제 귀 함수 가 반드시 하나 또는 하나 이상 의 형 삼 을 가 져 야 한 다 는 것 이다.매개 변수 가 없 는 제 귀 는 사 순환 을 형성한다.그리고 귀 중 함수 가 자신 을 호출 할 때마다 조심스럽게 파 라 메 터 를 제어 해 야 합 니 다.가능 한 한 순환 의 발생 을 방지 하고,제 귀 는 창고 와 밀접 한 관 계 를 가진다.
상기 기능 을 실현 하려 면 제 귀 함수 가 완성 해 야 할 기능 은 주로 다음 과 같다.
1)들 어 오 는 현재 사격 횟수 가 1 보다 적 거나 규정된 횟수 보다 많 을 때 는 제 귀 함수 의 집행 에서 물 러 나 야 한다.
2)남 은 사격 횟수 에서 매번 만점 을 받 지만 목표 점수 에 도달 하지 못 할 때 는 제 귀 에서 물 러 나 야 한다.
3)상기 두 가지 상황 이 없 으 면 제 귀 를 집행 해 야 한다.
구현 코드:
using System;
namespace Test
{
/// <summary>
/// ShotScore 。
/// </summary>
public class ShotScore
{
//
int SumRate = 0;
//
int[] ScoreArray;
//
int totalScore=0;
//
int totalShot=0;
//
public ShotScore(int[] sa,int ts,int t)
{
this.ScoreArray = sa;
this.totalShot = ts;
this.totalScore = t;
}
public int GetSum()
{
return SumRate;
}
public void Compute(int currentShot,int cNum)
{
//
if(currentShot<0||currentShot>totalShot)
{
return;
}
// 10 ,game over
if(((totalShot-currentShot+1)*10)<(totalScore-cNum))
{
return;
}
//
if(currentShot==totalShot)
{
//
SumRate++;
return;
}
for(int i=0;i<ScoreArray.Length;i++)
{
Compute(currentShot+1,cNum+ScoreArray[i]);
}
}
}
}
최종 결 과 는 92378 이다.요약:이 문 제 는 주로 프로그래머 의 논리 적 사고력 과 제 귀 함수 에 대한 응용 을 고찰 했다.매우 간단 하 다.그러나 논 리 는 반드시 명확 해 야 하고 문 제 를 분석 하 는 방법 은 반드시 정확 해 야 한다.
이상 이 바로 본문의 전체 내용 입 니 다.여러분 께 참고 가 될 수 있 기 를 바 랍 니 다.여러분 들 도 저 희 를 많이 응원 해 주시 기 바 랍 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
WebView2를 Visual Studio 2017 Express에서 사용할 수 있을 때까지Evergreen .Net Framework SDK 4.8 VisualStudio2017에서 NuGet을 사용하기 때문에 패키지 관리 방법을 packages.config 대신 PackageReference를 사용해야...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.