當前位置:編程學習大全網 - 編程語言 - 壹道編程題,幫下忙可以嘛?

壹道編程題,幫下忙可以嘛?

妳確定要把代碼粘貼到這裏麽...格式會被百度破壞的哈.

VC6.0編譯運行通過

#include <stdio.h>

#define MAX 100000

int number[MAX]; //電話號碼

int count[MAX]; //重復次數

int totalNumber; //存儲了的號碼數量

int tab[128]; //碼表

int dup[MAX]; //重復了的號碼

int totalDup; //重復了的號碼數量

//初始化

void Init ( void )

{

int abcTab[26] = { 2,2,2,3,3,3,4,4,4,5,5,5,6,6,6,7,0,7,7,8,8,8,9,9,9,9 };

int i;

totalNumber = 0;

totalDup = 0;

memset ( tab, -1, 128 * sizeof(int) );

for ( i = '0'; i <= '9'; i++ )

tab[i] = i - '0';

memcpy ( tab + 'A', abcTab, sizeof(int) * 26 );

tab['-'] = 10;

return;

}

//增加號碼

void AddNumber ( int n )

{

int i;

for ( i = 0; i < totalNumber; i++ )

if ( number[i] == n )

{

count[i]++;

if ( count[i] == 2 )

{

dup[totalDup] = i;

totalDup++;

}

return;

}

if ( totalNumber == MAX )

{

printf ( "Error! Too many numbers\n" );

exit(1);

}

else

{

number[totalNumber] = n;

count[totalNumber] = 1;

totalNumber++;

}

return;

}

//將電話號碼從字符串轉變為整數

int StringToInt ( char *s )

{

int res;

res = 0;

for ( ; *s != 0; s++ )

{

if ( *s == '-' )

continue;

res *= 10;

res += tab[*s];

}

return res;

}

void swap ( int *a, int *b )

{

*a ^= *b;

*b ^= *a;

*a ^= *b;

}

//給結果排序, 用冒泡

void Sort ( void )

{

int i, j;

int ni, nj;

int pa, pb;

ni = totalDup - 1;

for ( i = 0; i < ni; i++ )

{

nj = totalDup - i - 1;

for ( j = 0; j < nj; j++ )

{

pa = dup[j]; pb = dup[j+1];

if ( number[pa] > number[pb] )

{

swap ( number + pa, number + pb );

swap ( count + pa, count + pb );

}

}

}

return;

}

//輸出壹條結果

void Print ( int i )

{

const int n = 10000;

i = dup[i];

printf ( "%d-%d %d\n", number[i]/n, number[i]%n, count[i] );

return;

}

//用來控制輸入是從文件還是從stdin

//#define INPUT_FROM_TEST_FILE

#ifdef INPUT_FROM_TEST_FILE

FILE *fp;

#endif

//提示無結果並退出

void NoResult ( void )

{

printf ( "No duplicates.\n" );

#ifdef INPUT_FROM_TEST_FILE

fclose ( fp );

#endif

exit(2);

}

void main ( void )

{

int i, n;

char s[10000];

#ifdef INPUT_FROM_TEST_FILE

fp = fopen ( "test.txt", "r" );

if ( fp == NULL )

{

printf ( "Error!" );

exit(3);

}

#endif

Init();

#ifdef INPUT_FROM_TEST_FILE

fscanf ( fp, "%d", &n );

#else

scanf ( "%d", &n );

#endif

if ( n < 2 )

NoResult();

for ( i = 0; i < n; i++ )

{

#ifdef INPUT_FROM_TEST_FILE

fscanf ( fp, "%s", s );

#else

scanf ( "%s", s );

#endif

AddNumber ( StringToInt ( s ) );

}

Sort();

if ( totalDup == 0 )

NoResult();

for ( i = 0; i < totalDup; i++ )

{

Print ( i );

}

#ifdef INPUT_FROM_TEST_FILE

fclose ( fp );

#endif

}

  • 上一篇:什麽是Java?Java是用來做什麽的?
  • 下一篇:關於java和c#做web的壹些問題
  • copyright 2024編程學習大全網