C¸À¸ì´Ø·¸·Ç¼¨ÈÄ

²áµî¥í¥°

No.£µ£´£·¡¥·ÏÎó¤Îºï½ü¤ÈÁÞÆþ

[Ìá¤ë]¡¡[¥Û¡¼¥à¥Ú¡¼¥¸]
No.4732

·ÏÎó¤Îºï½ü¤ÈÁÞÆþ
Åê¹Æ¼Ô---hiro(2003/01/28 19:54:59)


¤¹¤¤¤Þ¤»¤ó¡£Á°²ó¤ÎÀâÌÀ¤Ç¤ÏÉÔ­¤Ç¤·¤¿¡£
Ëͤ¬ºî¤í¤¦¤È¤·¤Æ¤¤¤ë¤Î¤ÏÉ乿´Ø·¸¤Î¥×¥í¥°¥é¥à¤Ê¤Î¤Ç¤¹¤¬¡¢
¤â¤¦°ìÅÙ½é¤á¤«¤éÀâÌÀ¤·¤Þ¤¹¡£
¤Þ¤º¡¢A¡á£°£±£±£°£±£°£°£°£°£±¤È¤·¤Þ¤¹¡£
¤³¤ÎA¤ËÂФ·¤Æ¡¢
£±¡¢ ¤Þ¤ºÀèÆ¬¤Î£°¤òºï½ü¤·¤Þ¤¹¡£¤½¤¦¤¹¤ë¤È¡¢£±£±£°£±£°£°£°£°£±¤È¤Ê¤ê¤Þ¤¹¡£
£²¡¢ ¼¡¤Ë¤³¤Î£±£±£°£±£°£°£°£°£±¤Ë£°¤È£±¤òÁÞÆþ¤ò¤·¤Þ¤¹¡£¤¹¤Ê¤ï¤Á¡¢
£°£±£±£°£±£°£°£°£°£±¡¡¡¡¡¡£±£±£±£°£±£°£°£°£°£±
£±£°£±£°£±£°£°£°£°£±¡¡¡¡¡¡£±£±£±£°£±£°£°£°£°£±
£±£±£°£°£±£°£°£°£°£±¡¡¡¡¡¡£±£±£±£°£±£°£°£°£°£±
£±£±£°£°£±£°£°£°£°£±¡¡¡¡¡¡£±£±£°£±£±£°£°£°£°£±
£±£±£°£±£°£°£°£°£°£±¡¡¡¡¡¡£±£±£°£±£±£°£°£°£°£±
£±£±£°£±£°£°£°£°£°£±¡¡¡¡¡¡£±£±£°£±£°£±£°£°£°£±
£±£±£°£±£°£°£°£°£°£±¡¡¡¡¡¡£±£±£°£±£°£°£±£°£°£±
£±£±£°£±£°£°£°£°£°£±¡¡¡¡¡¡£±£±£°£±£°£°£°£±£°£±
£±£±£°£±£°£°£°£°£°£±¡¡¡¡¡¡£±£±£°£±£°£°£°£°£±£±
£±£±£°£±£°£°£°£°£±£°¡¡¡¡¡¡£±£±£°£±£°£°£°£°£±£±

¤È¤¤¤¦¡¢·ÏÎ󤬤Ǥ­¤Þ¤¹¡£
£³¡¢¤µ¤é¤Ëº£ÅÙ¤ÏÀèÆ¬¤«¤é£²ÈÖÌܤòºï½ü¡¢¤¹¤Ê¤ï¤Á£°£±£°£±£°£°£°£°£±¤È¤·¡¢
£²¤ò¤¯¤ê¤«¤¨¤·¤Þ¤¹¡£
¤³¤Îºï½ü¤ÈÁÞÆþ¤òÀèÆ¬¤«¤éºÇ¸å¤Þ¤Ç·«¤êÊÖ¤¹¤È½ÐÍè¾å¤¬¤ë·ÏÎó¤Ï20¡ß10¡á200¸Ä
¤È¤Ê¤ê¤Þ¤¹¡£
ºÇ¸å¤Ë¸µ¤Ë¤¢¤Ã¤¿A¤È½ÐÍè¾å¤¬¤Ã¤¿200¸Ä¤Î·ÏÎó¤ò¼¡¤Î¼°¤ËÅö¤Æ¤Ï¤á¤ÆÈæ³Ó¤·¤Þ¤¹¡£
£Á¡á£°£±£±£°£±£°£°£°£°£±¡á£Ò£±£Ò£²£Ò£³¡Ä£Ò10¤ÈÃÖ¤¤¤¿¤È¤­¡¢
S¡á­ô£é¡ß£Ò£é¡Êmod¡¡X¡Ë¡¡¡¡¡¡¡Ê¤¿¤À¤·¡¢i¤Ï£±¡Á£î¡Ë
¤³¤³¤Ç£î¤Ï·ÏÎó¤Î¿ô¡¢¤¹¤Ê¤ï¤Án¡á£±£°¤Ç¤¹¡£
£Á¤ò¤³¤Î¼°¤ËÅö¤Æ¤Ï¤á¤ë¤È
£Ó¡á1¡ß£°¡Ü2¡ß£±¡Ü3¡ß£±¡Ü4¡ß£°¡Ü5¡ß£±¡Ü6¡ß£°¡Ü7¡ß£°¡Ü8¡ß£°¡Ü9¡ß£°¡Ü10¡ß£±
¡¡¡á20¡Êmod¡¡X¡Ë
¤È¤Ê¤ê¤Þ¤¹¡£¤³¤³¤Ç¸µ¤Ë¤¢¤Ã¤¿A¤ÎS¤Ï0¤Ç¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¤È¤¤¤¦¾ò·ï¤¬¤¢¤ë¤Î¤Ç
X¡á20¤È¤ª¤¯¤³¤È¤Ë¤è¤Ã¤ÆS¡á£°¤È¤Ê¤ê¤Þ¤¹¡£
¤µ¤é¤Ë200¸Ä¤Î·ÏÎó¤ò¾åµ­¤Î¼°¤ËÅö¤Æ¤Ï¤á¡¢¼¡¤Î¾ò·ï¤Ë¹ç¤¦¤â¤Î¤Î¸Ä¿ô¤ò¥«¥¦¥ó¥È¤·¤Þ¤¹¡£
£±¡¢ S¡á£°¤Ç¤Ê¤¤¤â¤Î
£²¡¢ £°¡ãS¡å£î¡¡¤«¤Ä¡¡RS¡á£±¤Ç¤Ê¤¤¤â¤Î
£³¡¢ X¡Ý£î¡åS¡ã£î¡¡¤«¤Ä¡¡RS¡á£°¤Ç¤Ê¤¤¤â¤Î
º£¤ÏÎã¤È¤·¤Æ£î¡á10¡¢¤¹¤Ê¤ï¤Á·ÏÎó¤ò1£°¸Ä¤È¤·¤Æ¤¤¤ë¤Î¤Ç¤¹¤¬¡¢
ºÇ½ªÅª¤Ë£î¡á100¡Á1000¤°¤é¤¤¤Ë¤·¤Æ¥×¥í¥°¥é¥à¤òºî¤ë¾ì¹ç¤Ï¤É¤Î¤è¤¦¤Ë¤¹¤ì¤Ð¤è¤¤¤Î¤«¶µ¤¨¤Æ¤¯¤À¤µ¤¤¡£


No.4754

Re:·ÏÎó¤Îºï½ü¤ÈÁÞÆþ
Åê¹Æ¼Ô---¥«¥ó¥Ê(2003/01/28 23:00:55)
http://hana.sakura.ne.jp/~elfin/k/


¡¡ºÇŬ²½Åù¤ò°ìÀڹͤ¨¤ºÁÇľ¤Ëºî¤Ã¤¿¤é°Ê²¼¤Î¤è¤¦¤Ë¤Ê¤ê¤Þ¤·¤¿¡£
¡¡¾ò·ï¤ò¸í²ò¤·¤Æ¤¤¤ë¤«¤â¤·¤ì¤Þ¤»¤ó¡£»ä¤Î²ò¼á¤Ïanalyze¤ÎÃæ¤´¤í¤Ë¤¢¤ë
printf¤Î¤È¤ª¤ê¤Ç¤¹¡£´Ö°ã¤Ã¤Æ¤¤¤¿¤é¸æ»ØÅ¦¤¯¤À¤µ¤¤¡£
¡¡¤Ê¤ª·ÇºÜ¤ËÅö¤¿¤Ã¤Æ¹Ô¿ô¤òÀáÌ󤹤뤿¤á¤Ë°ú¿ô¥Á¥§¥Ã¥¯¤Ï¹Ô¤Ã¤Æ¤¤¤Þ¤»¤ó¡£

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

/* ÅÓÃæ·Ð²á¤òɽ¼¨¤¹¤ë¤«¡© */
int g_verbose = 0;	
    
/* ·ë²Ì³ÊǼÎΰè */
typedef struct _result{
    int count[3];
}result_t;

/* ¥×¥í¥È¥¿¥¤¥× */
result_t analyze(const char* original);
int get_S(const char* sequence);
int condition1(int S);
int condition2(const char* sequence, int S, int n);
int condition3(const char* sequence, int S, int n, int X);

/* main */
int main(int argc, char* argv[]){
    result_t result = analyze(argv[1]);

    printf("¾ò·ï£±:%d\n¾ò·ï£²:%d\n¾ò·ï£³:%d\n", 
        result.count[0], result.count[1], result.count[2]);

    return 0;
}

/* ²òÀÏ */
result_t analyze(const char* original){
    /* ·ë²Ì³ÊǼÎΰè */
    result_t result = { {0, 0, 0} };

    /* ºî¶ÈÎΰè */
    char*  work_area;

    /* ¥ë¡¼¥×ÊÑ¿ôÅù */
    size_t ix_delete, ix_insert, ix_from, ix_to;
    int ch;

    /* ²òÀÏÍÑÊÑ¿ô */    
    size_t n;
    int S;
    int X;

    /* ÅÓÃæ·Ð²áɽ¼¨ÍÑÏ¢ÈÖ */
    int no = 0;

    /* ¾ê;·¸¿ô¤Î»»½Ð */
    X = get_S(original);
    if ( g_verbose ) printf("X=%d\n", X);
    
    if ( X == 0 ){
        printf("X¤¬0¤Ë¤Ê¤ë¤Î¤Ç²òÀϤǤ­¤Þ¤»¤ó¡£\n");
        return result;
    }

    /* Ťµ¤Î¼èÆÀ¤Èºî¶ÈÎΰè¤Î½é´ü²½ */
    n = strlen(original);
    work_area = (char*)malloc(sizeof(char)*(n+1));
    work_area[n] = '\0';

    if ( g_verbose ){
        printf("¾ò·ï£±¡§S!=0\n");
        printf("¾ò·ï£²¡§0       <  S <= n(%3d) ¤«¤Ä RS=0\n", n);
        printf("¾ò·ï£³¡§X-n(%3d)<= S <  n(%3d) ¤«¤Ä RS=1\n", X-n, n);
    }

    /* ÀèÆ¬¤«¤é½ç¤Ëºï½ü¤¹¤ë */
    for ( ix_delete = 0; ix_delete < n; ++ix_delete ){
        /* ÀèÆ¬¤«¤é½ç¤ËÁÞÆþ¤¹¤ë */
        for ( ix_insert = 0; ix_insert < n; ++ix_insert){
            for ( ch = '0'; ch <= '1'; ++ch ){
                /* ·ÏÎó¤ÎºîÀ® */
                ix_from = 0;
                for ( ix_to = 0; ix_to < n; ++ix_to ){
                    if ( ix_from == ix_delete ) ++ix_from;
                    if ( ix_to == ix_insert ) work_area[ix_to] = ch;
                    else work_area[ix_to] = original[ix_from++];
                }
    
                if ( g_verbose ){
                    ++no; 
                    printf("%05d:%s", no, work_area);
                }
    
                /* ¾ò·ïÀ®Î©È½Äê */
                S = get_S(work_area) % X;
                if ( g_verbose ) printf(" S=%03d RS=%c", S, ( (0 < S && S <= (int)n) ? work_area[S-1] : '-'));
                if ( condition1(S)                  ) ++result.count[0];
                if ( condition2(work_area, S, n)    ) ++result.count[1];
                if ( condition3(work_area, S, n, X) ) ++result.count[2];
                if ( g_verbose ) printf("\n");
            }
        }
    }

    free(work_area);

    return result;
}

/* ·ÏÎó¤Î½Å¤ß¤Ä¤­¥Ó¥Ã¥È¹ç·× */
int get_S(const char* sequence){
    int S = 0;
    int i;
    for ( i = 1; sequence[i-1] != '\0'; ++i )
        if ( sequence[i-1] == '1' ) S += i;

    return S;
}

/* S¡á£°¤Ç¤Ê¤¤¤â¤Î */
int condition1(int S){
    if ( S != 0 ){
        if ( g_verbose ) printf(" Y");
        return 1;
    }else{
        if ( g_verbose ) printf(" N");
        return 0;
    }
}

/* £°¡ãS¡å£î¡¡¤«¤Ä¡¡RS¡á£±¤Ç¤Ê¤¤¤â¤Î */
int condition2(const char* sequence, int S, int n){
    if ( 0 < S && S <= n && sequence[S-1] != '1' ){
        if ( g_verbose ) printf(" Y");
        return 1;
    }else{
        if ( g_verbose ) printf(" N");
        return 0;
    }
}

/* X¡Ý£î¡åS¡ã£î¡¡¤«¤Ä¡¡RS¡á£°¤Ç¤Ê¤¤¤â¤Î */
int condition3(const char* sequence, int S, int n, int X){
    if ( X - n <= S && S < n && 0 < S && sequence[S-1] != '0' ){
        if ( g_verbose ) printf(" Y");
        return 1;
    }else{
        if ( g_verbose ) printf(" N");
        return 0;
    }
}


No.4829

Re:·ÏÎó¤Îºï½ü¤ÈÁÞÆþ
Åê¹Æ¼Ô---hiro(2003/01/30 14:53:28)


¤«¤ó¤Ê¤µ¤ó¡¢½õ¤«¤ê¤Þ¤·¤¿¡ª
¼«Ê¬¤Ç¤ä¤Ã¤Æ¤Ï¤¤¤ë¤â¤Î¤Î¤Ê¤«¤Ê¤«¤¦¤Þ¤¯¤¤¤«¤Ê¤«¤Ã¤¿¤Î¤Ç¡£
¤¢¤ê¤¬¤È¤¦¤´¤¶¤¤¤Þ¤¹¡£