刷题日记——矩阵转置、判断回文数(机试)

04-09 1033阅读

题目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;
}
VPS购买请点击我

文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。

目录[+]