거꾸로 된 가격표. - 블 루 브리지 컵.

2580 단어 블 루 브리지 컵
나의 새 블 로그 방문 을 환영 합 니 다.
주소
머리말
2013 년 블 루 브리지 컵 전국 소프트웨어 대회 예선 A 조 (C / C + + 조), 네 번 째 문 항 으로 빈 문 제 를 채 우기 위 한 아이디어 가 매 거 졌 다.
제목 설명
제목: 거꾸로 된 가격표    이 군의 가 게 는 다른 가게 에서 내 린 샘플 텔레비전 을 전문 적 으로 판매 하 는데 샘플 텔레비전 전문 점 이 라 고 할 수 있다.    그 표시 가격 은 모두 4 자리 숫자 다.    이 군 은 가격 표시 가 뚜렷 하고 편리 하기 위해 미리 제 작 된 디지털 튜브 와 유사 한 가격 표를 사 용 했 으 며, 색 연필 로 숫자 를 바 르 면 된다 (p1. jpg 참조).    이런 가격 표 는 특징 이 있 는데, 일부 숫자 에 대해 서 는 거꾸로 보 는 것 도 합 리 적 인 숫자 이다.하나, 둘, 다섯, 여섯, 여덟, 90 다 가능 합 니 다.이렇게 되면 브랜드 가 거꾸로 걸 리 면 완전히 다른 가격 이 될 수 있 습 니 다. 예 를 들 어 1958 거꾸로 걸 면 8561, 수천 원 이 부족 합 니 다!!      물론 대부분의 경우 거꾸로 읽 을 수 없다. 예 를 들 어 1110 은 거꾸로 읽 을 수 없다. 왜냐하면 0 은 시작 숫자 로 할 수 없 기 때문이다颠倒的价牌 - 蓝桥杯     어느 날 비극 이 일 어 났 습 니 다.어떤 점원 이 부주의 로 가게 의 어떤 가격 표를 거꾸로 걸 었 다.그리고 이 두 개의 가격표 텔레비전 이 모두 팔 렸 습 니 다!    다행히 가격 차이 가 크 지 않 았 는데, 그 중 하 나 는 200 여 위안 을 손해 보 았 고, 다른 하 나 는 800 여 위안 을 벌 어 종합 하면 오히려 558 위안 을 더 벌 었 다.    이 정보 에 근거 하여 계산 하 십시오. 배상 하 는 그 가격 표 의 정확 한 가격 은 얼마 입 니까?정 답 은 4 자리 정수 입 니 다. 브 라 우 저 를 통 해 이 숫자 를 직접 제출 하 십시오.메모: 해답 과정 이나 기타 보조 설명 류 의 내용 을 제출 하지 마 십시오.
분석 하 다.
이 문제 의 전체적인 사고방식 은 모든 가격 을 매 거 하 는 것 이다. 물론 이 과정 은 요구 에 부합 되 지 않 는 해 를 배제 해 야 한다.
거꾸로 보면 숫자 가 합 리 적 인 숫자 는 1, 2, 5, 6, 8, 9, 0 이다.
숫자의 값 이 바 뀐 것 은 6 이 9, 9 가 6 이다.
마지막 결 과 는 여러 조 의 해 를 얻 을 수 있 지만 교묘 하 게 도 손 해 를 본 그 가 파 의 정확 한 가격 은 모두 9088 이다.
코드 구현
#include <iostream>
using namespace std;
int check(int x) {
	int vis[10] = {1, 1, 1, 0, 0, 1, 1, 0, 1, 1};
	do {
		if(vis[x % 10] == 0) {
			return 0;
		}
	} while(x /= 10);
	return 1;
}
int reverse(int x) {
	int r = 0;
	do {
		int b = x % 10;
		if(b == 6) {
			b = 9;
		} else {
			if(b == 9) {
				b = 6;
			}
		}
		r = 10 * r + b;
	} while(x /= 10);
	return r;
}
int main(void) {
	//cout << reverse(8561) << endl;
	for(int i = 1001; i <= 9999; i++) {
		if(!check(i)) {
			continue;
		}
		int ir = reverse(i);
		int ip = i - ir;
		if(ip < 200 || ip >= 300) {
			continue;
		}
		for(int j = 1001; j <= 9999; j++) {
			if(!check(j)) {
				continue;
			}
			int jr = reverse(j);
			int jz = jr - j;
			if(jz < 800 || jz >= 900) {
				continue;
			}
			if(jz - ip == 558) {
				cout << i << endl;
				cout << i << ", " << j << endl;
			}
		}
	}
	cout << "Done." << endl;
	return 0;
}

답안
9088
(전문 완료)

좋은 웹페이지 즐겨찾기