王道机试 第二章 暴力求解
2.2 模拟
1、图形排版
例2.4 输出梯形(清华大学复试上机题)
#include <iostream>
#include <cstdio>
using namespace std;
int main ( )
{
int h;
while ( cin >> h) {
for ( int i = h - 1 ; i >= 0 ; i-- ) {
for ( int j = 0 ; j < 2 * h; j++ ) {
if ( i < h && i > j) cout << " " ;
else cout << "*" ;
}
cout << endl;
}
}
return 0 ;
}
例2.5 Hello World for U
题目解读 解题的关键是,U型字符的含义,左边和右边垂直部分加底部部分重合了两个字符,最后加起来在原字符串的基础上增加了两个。利用暴力枚举法,根据题目的公式要求计算n1、n2、n3,在输出时需要按行输出。
#include <iostream>
#include <cstdio>
#include <string>
using namespace std;
int main ( )
{
string s;
while ( cin >> s)
{
int n = s. size ( ) ;
int vertical;
int space;
for ( int n1 = n; n1 >= 1 ; n1-- ) {
int n2 = n1;
int n3 = n + 2 - n1 - n2;
if ( n3 >= 3 && n3 >= n1) {
vertical = n1;
space = n3 - 2 ;
break ;
}
}
for ( int i = 0 ; i < vertical - 1 ; i++ ) {
cout << s[ i] ;
for ( int j = 0 ; j < space; j++ ) cout << " " ;
cout << s[ n - 1 - i] << endl;
}
for ( int i = vertical - 1 ; i < vertical - 1 + space + 2 ; i++ )
{
cout << s[ i] ;
}
cout << endl;
}
return 0 ;
}