면접 문제 12:1 부터 최대 n 자리 까지 인쇄

제목 설명:온라인 판사
숫자 N 을 지정 하고 1 에서 최대 N 자리 까지 인쇄 합 니 다.
입력:
모든 입력 파일 에는 테스트 샘플 만 포함 되 어 있 습 니 다.각 테스트 사례 에 대해 숫자 N(1<=N<=5)을 입력 하 십시오.
출력:
각 테스트 사례 에 대응 하여 1 부터 최대 N 자리 까지 순서대로 인쇄 합 니 다.
샘플 입력:
1

샘플 출력:
1
2
3
4
5
6
7
8
9

문제 풀이 방향:
1)만약 이 문제 가 대수 문 제 를 고려 하지 않 는 다 면 직접 출력 하 는 것 은 비교적 간단 하 다.
2)본 문제 에 서 는 대수 문 제 를 고려 해 야 하 며 n 이 비교적 클 때 넘 칠 수 있다.
3)첫 번 째:대수 문 제 는 문자 처리,아 날로 그 가감 법 을 사용 해 야 한다.두 번 째:문 제 를 숫자 배열 의 해법 으로 전환한다.
자바 코드:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.StreamTokenizer;


public class Problem_12 {
	public static void main(String [] arg) throws IOException{
		BufferedReader bu = new BufferedReader(new InputStreamReader(System.in));
		StreamTokenizer str = new StreamTokenizer(bu);
		
		while(str.nextToken() != StreamTokenizer.TT_EOF){
			int number = (int)str.nval;
			if(1 <= number && number <= 5){
				for( int i = 1; i < Math.pow(10,number); i++ )
				System.out.println(i);
			}else{
				;
			}//end if
		}//end while
	}//end main
}

네트워크 에서 유래:
import java.util.Scanner;
  
public class Main {
    public static void main(String[] args) {
        Scanner cin = new Scanner(System.in);
        while(cin.hasNext()){
            int n = cin.nextInt();
            Print1ToMaxOfNDigits(n);
        }
    }
  
    private static void Print1ToMaxOfNDigits(int n) {
        if(n<=0) return;
        char[] a = new char[n];
        for(int i = 0;i<10;i++){
            a[0] = (char) (i + '0');
            Print1ToMaxOfNDigitsRecurssively(a,n,0);
        }
    }
  
    private static void Print1ToMaxOfNDigitsRecurssively(char[] a, int n, int i) {
        if(i == n-1){
            Printnumber(a);
            return;
        }
        for(int j = 0;j<10;j++){
            a[i+1] = (char) (j + '0');
            Print1ToMaxOfNDigitsRecurssively(a,n,i+1);
        }
    }
  
    private static void Printnumber(char[] a) {
        boolean isBeginning0 = true;
        for(int i = 0;i<a.length;i++){
            if(isBeginning0 && a[i] != '0')
                isBeginning0 = false;
            if(!isBeginning0){
                System.out.print(a[i]);
            }
        }
        if(!isBeginning0){
            System.out.println();
        }
    }
}

C++코드:
#include<iostream>
#include<cstdio>
#include<string>
using namespace std;
 
void printNum(string num) {
    int i = 0;
    for (; i < num.size() && num[i] == '0'; ++i);
    if (i == num.size()) return;
    for (int j = i; j < num.size(); ++j)
        printf("%c", num[j]);
    printf("
"); } void dfs(int index, int n, string& num) { if (index == n) { printNum(num); return; } for (int i = 0; i < 10; ++i) { num[index] = i + '0'; dfs(index + 1, n, num); } } void printAll(int n) { if (n <= 0) return; string num(n, '0'); dfs(0, n, num); } int main() { int n; while (cin >> n) { printAll(n); } return 0; }

C 코드:
#include<stdio.h>
#include<stdlib.h>
void print(char *num){
    int i; 
    for(i=0;num[i]=='0'&&num[i]!='\0';i++);
    if(num[i]!='\0')
    {
        for(int k=i;num[k]!='\0';k++)
            printf("%c",num[k]);
        printf("
"); } } void printtomax2(char *number,int len,int index) { if(index==len-1) { print(number); return; } for(int i=0;i<10;i++) { number[index+1]=i+'0'; printtomax2(number,len,index+1); } } void printtomax(int n) { if(n<=0) return; char *number=(char *)malloc(sizeof(char)*(n+1)); number[n]='\0'; for(int i=0;i<10;i++) { number[0]=i+'0'; printtomax2(number,n,0); } } int main() { int n; scanf("%d",&n); printtomax(n); return 1; }

테스트 용례:
기능 테스트(1,2,3 등 입력)
특수 테스트(입력-1,0)
체험:
체험:출제 자의 진정한 의 도 는 어떤 n,2 online judge 에 대해 n<=5 를 제한 하 는 것 이다.그러면 넘 치 는 문 제 를 고려 하지 않 기 때문에 문제 도 매우 간단 해 야 한다.  만약 진정 으로 모든 정수 에 대해 처리 할 수 있다 면,반드시 스스로 문자열 처 리 를 해서 알고리즘 을 실현 해 야 한다.

좋은 웹페이지 즐겨찾기