题解 P6450 【[COCI2008-2009#4] ROT】
wuyonghuming · · 题解
这道题目直接按照题目说的模拟就行了
k=0时
damir
marko
darko
damir
marko
darko
for(int i=1;i<=r;i++)//循环每一行
{
for(int j=1;j<=c;j++)//循环每一列
{
cout<<m[i][j];//输出答案
}
cout<<endl;//下一行
}
k=45时
damir
marko
darko
d
m a
d a m
a r i
r k r
k o
o
for(int i=1;i<=r+c-1;i++)//输出有行加列减一行
{
for(int a=1;a<=abs(r-i);a++)//列数减去输出的行数的绝对值是这行前面的空格数
{
cout<<' ';//输出空格
}
for(int a=r;a>=1;a--)//先输出行坐标大的所以从后往前
{
for(int b=c;b>=1;b--)//从后往前
{
if(a+b==i+1)//如果行加上列是输出的行数减一那么这个数就在这一行
{
cout<<m[a][b]<<' ';//输出
}
}
}
cout<<endl;//下一行
}
k=90时
damir
marko
darko
dmd
aaa
rrm
kki
oor
for(int i=1;i<=c;i++)//先输出最前面那个数,输出的行数有和输入的列数一样多
{
for(int j=r;j>=1;j--)//先输出最后那个数,输出的列数有和输入的行数一样多
{
cout<<m[j][i];//输出答案
}
cout<<endl;//下一行
}
k=135时
damir
marko
darko
d
a m
r a d
k r a
o k m
o i
r
for(int i=1;i<=r+c-1;i++)//输出有行加列减一行
{
for(int a=1;a<=abs(c-i);a++)//列减去输出的行数的绝对值是这行前面的空格数
{
cout<<' ';//输出空格
}
for(int a=r;a>=1;a--)//因为先输出行坐标大的所以从后往前
{
for(int b=1;b<=c;b++)//从前往后
{
if(r-a+b==i)//如果符合输出要求
{
cout<<m[a][b]<<' ';//输出答案
}
}
}
cout<<endl;//下一行
}
k=180时
damir
marko
darko
okrad
okram
rimad
for(int a=r;a>=1;a--)//从最后一行往前输出
{
for(int b=c;b>=1;b--)//从最后一列往前输出
{
cout<<m[a][b];//输出答案
}
cout<<endl;//下一行
}
k=225时
damir
marko
darko
o
o k
r k r
i r a
m a d
a m
d
for(int i=1;i<=r+c-1;i++)//输出有长加宽减一行
{
for(int a=1;a<=abs(r-i);a++)//长减去输出行数的绝对值是这行前面的空格数
{
cout<<' ';//输出空格
}
for(int a=1;a<=r;a++)//因为先输出行坐标小的所以从前往后
{
for(int b=1;b<=c;b++)//从前往后
{
if(r-a+c-b==i-1)//如果符合要求
{
cout<<m[a][b]<<' ';//输出答案
}
}
}
cout<<endl;//下一行
}
k=270时
damir
marko
darko
roo
ikk
mrr
aaa
dmd
for(int a=c;a>=1;a--)//先输出最后面那个数,输出的行数有和输入的列数一样多
{
for(int b=1;b<=r;b++)//先输出最前面那个数,输出的列数有和输入的行数一样多
{
cout<<m[b][a];//输出答案
}
cout<<endl;//下一行
}
k=315时
damir
marko
darko
r
i o
m k o
a r k
d a r
m a
d
for(int i=1;i<=r+c-1;i++)//输出有行加列减一行
{
for(int a=1;a<=abs(c-i);a++)//列减去输出的行数的绝对值是这行前面的空格数
{
cout<<' ';//输出空格
}
for(int a=1;a<=r;a++)//因为先输出行坐标小的所以从后往前
{
for(int b=c;b>=1;b--)//从后往前
{
if(a+c-b==i)//如果符合要求
{
cout<<m[a][b]<<' ';//输出答案
}
}
}
cout<<endl;//下一行
}
代码:
#include <bits/stdc++.h>//头文件
using namespace std;
int main()//主函数
{
int r,c,k;//行列和度数
char m[11][11];//图形
cin>>r>>c;//输入行列
for(int i=1;i<=r;i++)//有r行输入
{
for(int j=1;j<=c;j++)//有c列输入
{
cin>>m[i][j];//输入图形
}
}
cin>>k;//输入度数
k%=360;//取余数,保证大于315的度数正确
if(k==0)
{
for(int i=1;i<=r;i++)
{
for(int j=1;j<=c;j++)
{
cout<<m[i][j];
}
cout<<endl;
}
}
if(k==45)
{
for(int i=1;i<=r+c-1;i++)
{
for(int a=1;a<=abs(r-i);a++)
{
cout<<' ';
}
for(int a=r;a>=1;a--)
{
for(int b=c;b>=1;b--)
{
if(a+b==i+1)
{
cout<<m[a][b]<<' ';
}
}
}
cout<<endl;
}
}
if(k==90)
{
for(int i=1;i<=c;i++)
{
for(int j=r;j>=1;j--)
{
cout<<m[j][i];
}
cout<<endl;
}
}
if(k==135)
{
for(int i=1;i<=r+c-1;i++)
{
for(int a=1;a<=abs(c-i);a++)
{
cout<<' ';
}
for(int a=r;a>=1;a--)
{
for(int b=1;b<=c;b++)
{
if(r-a+b==i)
{
cout<<m[a][b]<<' ';
}
}
}
cout<<endl;
}
}
if(k==180)
{
for(int a=r;a>=1;a--)
{
for(int b=c;b>=1;b--)
{
cout<<m[a][b];
}
cout<<endl;
}
}
if(k==225)
{
for(int i=1;i<=r+c-1;i++)
{
for(int a=1;a<=abs(r-i);a++)
{
cout<<' ';
}
for(int a=1;a<=r;a++)
{
for(int b=1;b<=c;b++)
{
if(r-a+c-b==i-1)
{
cout<<m[a][b]<<' ';
}
}
}
cout<<endl;
}
}
if(k==270)
{
for(int a=c;a>=1;a--)
{
for(int b=1;b<=r;b++)
{
cout<<m[b][a];
}
cout<<endl;
}
}
if(k==315)
{
for(int i=1;i<=r+c-1;i++)
{
for(int a=1;a<=abs(c-i);a++)
{
cout<<' ';
}
for(int a=1;a<=r;a++)
{
for(int b=c;b>=1;b--)
{
if(a+c-b==i)
{
cout<<m[a][b]<<' ';
}
}
}
cout<<endl;
}
}
return 0;//别忘了
}
感谢:
感谢管理审核!
感谢大家观赏!