CH3-UVA1225

UVA1225
사고의 방향
사고방식 은 매우 간단 하 다. 왜냐하면 제목 은 최대 입력 N 이 고 최대 10000 을 넘 지 않 기 때문이다. 입력 한 데이터 그룹 은 최대 20 줄 이다. 나의 사고방식 은 매우 간단 하 다. 바로 매 거 진 1 에서 N 의 수 를 취한 다음 에 각 숫자 를 여러분 으로 분해 한 후에 대응 하 는 0 ~ 9 로 통계 하 는 것 이다. 그러나 조회 자 에 대해 매번 한 번 씩 계산 해 서 는 안 된다. 이렇게 하면 시간 이 너무 낭비 된다. 그래서 우 리 는 먼저 데이터 구조 result (r) (c) 를 정한다.입력 한 숫자 는 r 이 고 몇 개의 c 숫자 가 있 음 을 나타 내 면 우 리 는 r 번 째 숫자 가 나타 내 는 것 은 r - 1 번 숫자 에 r 라 는 숫자 자체, 즉 result (r) (c) = result (r) (c) + result (r - 1) (c) 를 더 한 것 임 을 알 수 있다.
//
// Created by sixleaves on 2016/11/19.
//
#include 
#include 
#include 
#define MAXSIZE 10001
int result[MAXSIZE][10];

int main() {

    memset(result, 0, sizeof(result));
    for (int i = 1; i < MAXSIZE; i++) {
        int temp = i;
        int r = 0;
        while (temp) {
            r = temp % 10;
            result[i][r]++;
            temp = temp / 10;
        }

        for (int j= 0; j < 10; j++) {
            result[i][j] += result[i - 1][j];
        }
    }

    int n;
    int input;
    scanf("%d", &n);
    for (int i = 0; i < n; i++) {

        scanf("%d", &input);

        for (int j = 0; j < 10; j++) {
            printf( j == 0? "%d" : " %d", result[input][j]);
        }
        printf("
"); } return 0; }

요약:
  • 분해 수 Num
  • 하나의 숫자 Num 을 각 비트 의 숫자 로 분해 하 는 사 고 는 매번 마지막 자 리 를 취하 고 10 을 제거 하 며 마지막 자 리 를 없 애 는 것 이다 (Num = = 0).
    while(num) {
      int s = num % 10;
      num /= 10;
    }
    

    좋은 웹페이지 즐겨찾기