|
|
发表于 2014-5-10 13:33:44
|
显示全部楼层
- #include<stdio.h>
- #include<stdlib.h>
- typedef struct digit
- {
- int d, sum;
- } *Digit;
- void Bubble( Digit D, int n )
- {
- for( int i = 1; i < n; i++ )
- {
- for( int j = 0; j < n - i; j++ )
- {
- if( D[j].sum > D[j+1].sum )
- {
- // Swap
- D[j].d ^= D[j+1].d ^= D[j].d ^= D[j+1].d;
- D[j].sum ^= D[j+1].sum ^= D[j].sum ^= D[j+1].sum;
- }
- if( D[j].sum == D[j+1].sum && D[j].d > D[j+1].d )
- {
- // Swap
- D[j].d ^= D[j+1].d ^= D[j].d ^= D[j+1].d;
- D[j].sum ^= D[j+1].sum ^= D[j].sum ^= D[j+1].sum;
- }
- }
- }
- }
- int main( void )
- {
- Digit D;
- int n, temp;
- scanf("%d", &n );
- // memory allocation
- D = ( Digit )malloc( n * sizeof( Digit ) );
- for( int i = 0; i < n; i++ )
- {
- scanf("%d", &temp );
- D[i].d = temp;
- D[i].sum = temp % 10;
- temp /= 10;
- while( temp )
- {
- D[i].sum += temp % 10;
- temp /= 10;
- }
- }
- Bubble( D, n );
- for( i = 0; i < n; i++ )
- {
- printf("%d ", D[i].d );
- }
- puts("");
- return 0;
- }
复制代码 |
|