《ACM程序设计入门》 考试题目
90 90 90 90 90 样例输出:
1 1 85 95 90 90 90 90 3 1 90 90 90 90 90 90 2 3 80 75 80 85 80 80
源程序:
#include
struct Node { friend bool operator<( Node a , Node b ) { return a.grade < b.grade ; } int grade; int sno ; } ;
int cmp( const void *a , const void*b ) { return ((Node*)a)->grade - ((Node*)b)->grade ; }
int main() { int n , m , **s , i , j , k , sum ; Node *avg ; while( cin >> n >> m ) { s = new int*[n] ; avg = new Node[n] ; for( i = 0 ; i < n ; i++ )
}
{ return 0 ;
sum = 0 ; }
s[i] = new int[m] ; 题目九:将给定的字符串放大显示。给定的数字为 for( j = 0 ; j < m ; j++ ) 0~9的一些数字的组合,将给定的数字放大后输出。 { 0到9的放大到4*5大小格式如下:
cin >> s[i][j] ; 0000 1222233334 455556666777788889999 sum += s[i][j] ; 0 0 1 2 34 45 6 78 89 9 } 0 0 122223333444455556666 788889999 avg[i].grade = sum / m ; 0 0 12 3 4 56 6 78 8 9 avg[i].sno = i ; 0000 122223333 455556666 788889999 } 输入:整数
输出:放大后的字符 qsort( (void*)avg , n , sizeof Node , cmp ) ; 样例输入: 0123456789 for( i = n-1 , k = 0 ; i >=0 ; i-- ) 3
{ 样例输出
cout << avg[i].sno+1 << ' ' << ( i == n-1 0000 1222233334 455556666777788889999 || avg[i].grade != avg[i+1].grade ? ++k : k ) << ' ' ; 0 0 1 2 34 45 6 78 89 9 0 0 122223333444455556666 788889999 for( j = 0 ; j < m ; j++ ) 0 0 12 3 4 56 6 78 8 9 cout << s[avg[i].sno][j] << ' ' ; 0000 122223333 455556666 788889999 3333 cout << avg[i].grade << endl ; 3 } 3333 3 delete []avg ; 3333 for( i = 0 ; i < n ; i++ )
delete[]s[i] ; 源程序:
delete[]s ;
#include
第6页 /共8页
《ACM程序设计入门》 考试题目
#include void SubLinePrint( int i , char num , int m )//n*m格式 { const int n = 4 , m = 5 ; using namespace std ; { int k ; switch( i ) /*
{ 0000 1 2222 3333 4 4 5555 6666 7777 8888 9999 case 0 : 0 0 1 2 3 4 4 5 6 7 8 8 9 for( k = 0 ; k < m ; k++ ) 9
cout << num ; 0 0 1 2222 3333 4444 5555 6666 7 8888 9999 break ; 0 0 1 2 3 4 5 6 6 7 8 8 case 1 : 9
for( k = 0 ; k < m ; k++ ) 0000 1 2222 3333 4 5555 6666 7 8888 if( k == 0 || k == m-1 ) 9999 cout << num ;
else cout << ' ' ; **** break ; * * case 2 : **** for( k = 0 ; k < m ; k++ ) * * if( k == m-1 ) **** cout << num ; else cout << ' ' ; 0 :**** break ; 1 :* * case 3 : 2 : * for( k = 0 ; k < m ; k++ ) 3 :* if( k == 0 ) cout << num ; */
else cout << ' ' ; int temp[10][5] = { {0,1,1,1,0},{2,2,2,2,2}, break ; {0,2,0,3,0},{0,2,0,2,0},{1,1,0,2,2},
} {0,3,0,2,0},{0,3,0,1,0},{0,2,2,2,2},{0,1,0,1,0},{0,1,0,2,0} }} ;
int main()
第7页 /共8页
char ch[100] ; int i , j , len ; while( gets( ch ) ) { len = strlen( ch ) ; for( i = 0 ; i < m ; i++ ) { for( j = 0 ; j < len ; j++ ) { SubLinePrint( temp[ch[j]-'0'][i] , ch[j] , m ) ; cout << ' ' ; } cout << endl ; } } return 0 ; }
题目十:给定6个整数,通过合理的+-*/()运算来得到预期的结果。编程求出表达式。 输入:6个整数和目标数 输出:四则运算的表达式 样例输入: 3 26 78 12 17 30
样例输出: 30: ((((26*3)+78)/12)+17 源程序:
#include
《ACM程序设计入门》 考试题目
using namespace std ; char op[5] = \ bool used[5] ;
void print( char temp[] , int num[] , int answer ) { cout << answer << \ for( int i = 0 ; temp[i] ; i++ ) { if( i%2 == 0 ) { cout << num[temp[i]-'0'] ; if( i && temp[i+1] ) cout << \ } else cout << temp[i] ; } cout << endl ; }
void Explore( char temp[] , int num[] , int index result , int answer )// index : 2 4 6 8 { if( index <= 8 ) { int t; for( int i = 0 ; i < 5; i++ ) { if( !used[i] ) {
, int == 8 )
answer ) ;
t= result ;
return ; for( int j = 0 ; j < 4 ; j++ ) } { Explore( temp , num, index+2 , result = t ; result , answer ) ; switch( j ) used[i] = false ; { case 0 : } result += num[i] ; } break ; } case 1 : } result -= num[i] ; }
break ; int main() case 2 : { result *= num[i] ; char temp[50] ; break ; int num[6] ; case 3 : if( result %num[i] == 0 ) memset( used , false , sizeof used ) ; result /= num[i] ; for( int i = 0 ; i < 6; i++ ) else continue ; cin >> num[i] ; break ; for( i = 0 ; i < 5 ; i++ ) } { used[i] = true ; temp[0] = '0'+i ; temp[index] = '0'+i ; used[i] = true ; temp[index-1] = op[j] ; Explore( temp , num, 2 , num[i] , num[5] ) ;// if( result == answer && index 从第2个数( operator num[x] )且x不重复,第一个数为num[i] { used[i] = false ;
temp[index+1] = '\\0' ; }
print( temp , num , return 0 ;
}
第8页 /共8页