题目链接:
题目大意:
给出一个课程表,用程序画出它来
题目分析:
模拟,STL大法好,比较好调…..
AC代码:
#include <iostream>
#include <cstring>
#include <cstdio>
#include <iomanip>
#include <algorithm>
#include <vector>
#include <string>
#define MAX 10000;
using namespace std;
string s;
int n;
int grid[10][10];
int h[10];
vector<string> v[20];
string p[]={"Tuesday","Thursday","Saturday"};
bool check ( string s1 , string s2 )
{
int len1 = s1.length();
int len2 = s2.length();
if (len1 != len2 ) return false;
for ( int i = 0 ; i < len1 ; i++ )
if ( s1[i] != s2[i] ) return false;
return true;
}
int main ( )
{
while ( ~scanf ( "%d" , &n ) )
{
memset ( grid , -1 , sizeof ( grid ));
for ( int i = 1 ; i <= n ; i++ )
{
v[i].clear();
int col,row;
cin >> s;
while ( true )
{
bool flag = false;
for ( int j = 0 ; j < 3 ; j++ )
if ( !s.compare ( p[j] ) )
{
col = j+1;
flag = true;
break;
}
if ( flag ) break;
else v[i].push_back ( s );
cin >> s;
}
cin >> row;
grid[row][col] = i;
}
for ( int i = 1 ; i <= n ; i++ )
{
int len = v[i].size();
int id = 0;
vector<string> temp;
string ss = "";
for ( int j = 0 ; j < len ; j++ )
if ( ss == "" )
{
ss += v[i][j];
}
else if ( v[i][j].length() + ss.length() < 10 )
{
ss +=" ";
ss += v[i][j];
}
else
{
temp.push_back ( ss );
ss = v[i][j];
}
temp.push_back ( ss );
v[i].clear();
for ( int j = 0 ; j < temp.size() ; j++ )
v[i].push_back ( temp[j] );
}
for ( int i = 1 ; i <= 4 ; i++ )
{
h[i] = 1;
}
for ( int i = 1 ; i <= 4 ; i++ )
{
for ( int j = 1 ; j <= 3 ; j++ )
if ( grid[i][j] != -1 )
{
int len = v[grid[i][j]].size();
h[i] = max ( h[i] , len );
}
}
for ( int k = 1 ; k <= 4 ; k++ )
{
cout << "+----------+----------+----------+" << endl;
for ( int j = 1 ; j <= h[k] ; j++ )
{
for ( int i = 1 ; i <= 3 ; i++ )
{
int id = grid[k][i];
if ( id == -1 ) cout <<setw(11)<<left<<"|";
else if ( v[id].size() < j ) cout <<setw(11)<<left<<"|";
else cout <<left<< "|" << setw(10) << v[id][j-1];
}
cout << "|" << endl;
}
}
cout << "+----------+----------+----------+" << endl;
}
}