刷题日记——矩阵转置、判断回文数(机试)
题目1——矩阵转置
分析
题目要求原地逆置,看了dreamjudge另外几篇题解都是用的swap交换vector向量,有一个更离谱的直接用二维数组,甚至还用新设置一个值凑三个交换,简直明目张胆地无视题目要求。
但是我觉得题目可能没有这么简单,如果要原地逆置,相似的情形只有链表原地转置,就是设置100个链表存每行的元素,然后原地逆置,但是矩阵逆置跟链表头插法原地还是有不同的,比如说,矩阵每行其实是中间不逆置,而是两边逆置,这样好像用链表也是行不通。
于是我想到用队列,先将矩阵看作一维数组,这样观察矩阵转置规律可以发现,转置过后,每一行输出的,就是按照输入顺序对n取余得到余数相同的数字,这些余数相同的数字就是它们输出矩阵的行号。
嘿嘿嘿,代码来咯!
#include #include using namespace std; queue num[101]; int main(){ int n; scanf("%d",&n); for(int i=0;i int temp; scanf("%d",&temp); num[i%n].push(temp); } for(int i=0;i for(int j=0;j int temp=num[i].front(); num[i].pop(); printf("%d ",temp); } printf("\n"); } return 0; } char num[20]; while(scanf("%s",num)!=EOF){ string number = num; string reversed = ""; for(int i=number.length()-1;i=0;i--){ reversed += number[i]; } if(reversed == number){ printf("Yes\n"); }else{ printf("No\n"); } } return 0; }
文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。