主题:noip2007提高复赛第二题解答
#include <cstdlib>
#include <iostream>
using namespace std;
char s[200];
void draw(int kai , int jie , int a , int b)
{
char t = 0;
int i , j;
for (i = kai ; i <= jie ; i++)
{
if (a == 1)
{
t = i;
if (t >= 'A' && t <= 'Z')
t = t + 32;
}
else if (a == 2)
{
t = i;
if (t >= 'a' && t <= 'z')
t = t - 32;
}
for (j = 1 ; j <= b ; j++)
{
if (a == 3)
cout << "*";
else
cout << t;
}
}
}
void draw2(int kai , int jie , int a , int b)
{
char t = 0;
int i , j;
for (i = jie ; i >= kai ; i--)
{
if (a == 1)
{
t = i;
if (t >= 'A' && t <= 'Z')
t = t + 32;
}
else if (a == 2)
{
t = i;
if (t >= 'a' && t <= 'z')
t = t - 32;
}
else if (a == 3)
t = '*';
for (j = 1 ; j <= b ; j++)
cout << t;
}
}
void xy(int p1 , int p2 , int p3)
{
int i , j , k , l = strlen(s);
for (i = 0 ; i < l ; i++)
{
if (s[i] != '-' && s[i + 1] == '-' && ((s[i] >= '0' && s[i] <= '9' && s[i + 2] >= '0' && s[i + 2] <= '9') || (s[i] >= 'a' && s[i] <= 'z' && s[i + 2] >= 'a' && s[i + 2] <= 'z') || (s[i] >= 'A' && s[i] <= 'Z' && s[i + 2] >= 'A' && s[i + 2] <= 'Z')))
{
if (s[i] > s[i + 2] || s[i] == s[i + 2])
{
cout << s[i] << s[i + 1] << s[i + 2];
i = i + 2;
}
else if (abs(s[i] - s[i + 2]) == 1)
{
cout << s[i] << s[i + 2];
i = i + 3;
}
else if (s[i] < s[i + 2])
{
if ((s[i] >= '0' && s[i] <= '9' && s[i + 2] >= '0' && s[i + 2] <= '9') || (s[i] >= 'a' && s[i] <= 'z' && s[i + 2] >= 'a' && s[i + 2] <= 'z') || (s[i] >= 'A' && s[i] <= 'Z' && s[i + 2] >= 'A' && s[i + 2] <= 'Z'))
cout << s[i];
if (p3 == 1)
draw(s[i] + 1 , s[i + 2] - 1 , p1 , p2);
if (p3 == 2)
draw2(s[i] + 1 , s[i + 2] - 1 , p1 , p2);
i = i + 1;
}
}
else
cout << s[i];
}
}
int main(int argc, char *argv[])
{
int p1 , p2 , p3;
cin >> p1 >> p2 >> p3;
if (p1 == 3)
p3 = 1;
cin >> s;
xy(p1 , p2 , p3);
cout << endl;
//system("PAUSE");
return EXIT_SUCCESS;
}
此程序错在哪里?
在http://58.119.3.34/JudgeOnline/showproblem?problem_id=1103上验证。
#include <iostream>
using namespace std;
char s[200];
void draw(int kai , int jie , int a , int b)
{
char t = 0;
int i , j;
for (i = kai ; i <= jie ; i++)
{
if (a == 1)
{
t = i;
if (t >= 'A' && t <= 'Z')
t = t + 32;
}
else if (a == 2)
{
t = i;
if (t >= 'a' && t <= 'z')
t = t - 32;
}
for (j = 1 ; j <= b ; j++)
{
if (a == 3)
cout << "*";
else
cout << t;
}
}
}
void draw2(int kai , int jie , int a , int b)
{
char t = 0;
int i , j;
for (i = jie ; i >= kai ; i--)
{
if (a == 1)
{
t = i;
if (t >= 'A' && t <= 'Z')
t = t + 32;
}
else if (a == 2)
{
t = i;
if (t >= 'a' && t <= 'z')
t = t - 32;
}
else if (a == 3)
t = '*';
for (j = 1 ; j <= b ; j++)
cout << t;
}
}
void xy(int p1 , int p2 , int p3)
{
int i , j , k , l = strlen(s);
for (i = 0 ; i < l ; i++)
{
if (s[i] != '-' && s[i + 1] == '-' && ((s[i] >= '0' && s[i] <= '9' && s[i + 2] >= '0' && s[i + 2] <= '9') || (s[i] >= 'a' && s[i] <= 'z' && s[i + 2] >= 'a' && s[i + 2] <= 'z') || (s[i] >= 'A' && s[i] <= 'Z' && s[i + 2] >= 'A' && s[i + 2] <= 'Z')))
{
if (s[i] > s[i + 2] || s[i] == s[i + 2])
{
cout << s[i] << s[i + 1] << s[i + 2];
i = i + 2;
}
else if (abs(s[i] - s[i + 2]) == 1)
{
cout << s[i] << s[i + 2];
i = i + 3;
}
else if (s[i] < s[i + 2])
{
if ((s[i] >= '0' && s[i] <= '9' && s[i + 2] >= '0' && s[i + 2] <= '9') || (s[i] >= 'a' && s[i] <= 'z' && s[i + 2] >= 'a' && s[i + 2] <= 'z') || (s[i] >= 'A' && s[i] <= 'Z' && s[i + 2] >= 'A' && s[i + 2] <= 'Z'))
cout << s[i];
if (p3 == 1)
draw(s[i] + 1 , s[i + 2] - 1 , p1 , p2);
if (p3 == 2)
draw2(s[i] + 1 , s[i + 2] - 1 , p1 , p2);
i = i + 1;
}
}
else
cout << s[i];
}
}
int main(int argc, char *argv[])
{
int p1 , p2 , p3;
cin >> p1 >> p2 >> p3;
if (p1 == 3)
p3 = 1;
cin >> s;
xy(p1 , p2 , p3);
cout << endl;
//system("PAUSE");
return EXIT_SUCCESS;
}
此程序错在哪里?
在http://58.119.3.34/JudgeOnline/showproblem?problem_id=1103上验证。