hut 1054 Jesse's Code 문제 풀이 보고서

15139 단어 code
링크: http://oj.innlab.net/JudgeOnline/problem.php?id=1504
Description
Jesse는 수학광이다. 그는 고드바흐의 추측을 연구하는 것을 가장 좋아하기 때문에, 그의 컴퓨터 비밀번호도 모두 소수를 채택한다.그러나 같은 비밀번호를 계속 사용하는 것은 안전하지 않기 때문에 그는 자주 비밀번호를 바꿔야 한다.그러나 그는 자신의 비밀번호에 숫자만 표시할 수 있고 비밀번호의 한 명도 같지 않다.예컨대 124의 경우 124 142 214 241 412 421 6가지가 있다.그중 241과 421은 소수다.그의 비밀번호를 얻기 위해 (그의 기계에는 제4회 순우배 대학생 프로그래밍 경연의 제목이 저장되어 있다!)우리가 해독하는 것을 돕기 위해 사전을 만들어야 한다.당신이 우리를 돕기 위해 프로그램을 작성해 주십시오. (모두가 알고 있는 바와 같이 우리는 이 문제들을 얻는 것이 절실하기 때문입니다.)
Input
  • 라인 1: 암호의 비트 n(1≤n≤9).
  • 라인 2:1->n개의 중복되지 않는 정수 서열 (1≤x[i]≤9).

  • 0 끝을 입력합니다.
    Output
    모든 결과를 작은 순서에서 큰 순서로 출력하다.결과가 없으면 NONE을 내보냅니다.각 그룹의 데이터 뒤에 빈 줄이 있습니다.
    Sample Input
    3 1 2 4 0
    Sample Output
    241 421
    오랜만이네.
    이 문제는 본질적으로 물문제가 출시되었지만, 나는 밤새도록 고민을 했는데, 주로next를 사용할 줄 몰랐다permutation ()이라는 강력한 함수를 기념해 보세요.
     1 #include <stdio.h>
    2 #include <stdlib.h>
    3 #include <math.h>
    4 #include<algorithm>
    5 using namespace std;
    6 int a[10];
    7 int fun( int x )
    8 {
    9 for( int i=2; i<=(int)sqrt( x ); ++i )
    10 {
    11 if( x%i==0 )
    12 return 0;
    13 }
    14 return 1;
    15 }
    16
    17 int cmp( const void *a , const void *b )
    18 {
    19 return *( int * )a - *( int * )b;
    20 }
    21
    22 int main( )
    23 {
    24 int n;
    25 int jc[10]={1};
    26 for( int i=1; i<=10; ++i )
    27 {
    28 jc[i]=i*jc[i-1];
    29 }
    30 while( scanf( "%d", &n ) !=EOF, n )
    31 {
    32 int i, j;
    33 if( n == 9 )
    34 {
    35 puts( "NONE" );//
    36 continue;
    37 }
    38 for( i=0; i<n; ++i )
    39 {
    40 scanf( "%d", &a[i] );
    41 }
    42 qsort( a, n, sizeof( a[0] ), cmp );
    43 int s, f=1;
    44 for(j=0; j<jc[n] ;j++,next_permutation( a,a+n))
    45 {
    46
    47 s=0;
    48 for(i=0;i<n;i++)
    49 {
    50 s=s*10+a[i];
    51 }
    52 if (fun(s))
    53 {
    54 printf( "%d
    ", s );
    55 f=0;
    56 }
    57 }
    58 if( f )
    59 puts( "NONE" );
    60 }
    61 return 0;
    62 }

    좋은 웹페이지 즐겨찾기