一 中兴2016年校招
输入数字n,打印阵列。例如:
输入3
输出:
1*2*3
6*7*8
4*5*6
输入4
输出:
1*2*3*4
9*10*11*12
13*14*15*16
5*6*7*8
解题思路:
(本人能力有限,方法较笨,欢迎在评论里提供个好的方法)
定义一个二维数组,依次给数组的第0、n、1、n-1、2、n-2…行赋值,这样赋值刚好是一个顺序序列。最后依次输出二维数组。代码如下,经过测试无误:
int main()
{
int n = 0;
std::cin >> n;
int **arr = new int*[n]; //定义二维数组
for(int i=0;i<n;i++) {
arr[i] = new int[n];
}
int times = 0; //定义当前打印的次数,比如n为4时,需要打印0--3次
int rows = 0; //定义当前赋值的行编号,比如n为4,则赋值行顺序为0312
int num = 1; //定义当前的赋值,比如n为4,则赋值序列为1--16;
int begin1 = n; //这两个值的作用是记录和变换当前的打印行号
int begin2 = 0;
while (times<n) {
for(int cols=0;cols<n;cols++) {
arr[rows][cols] = num;
num++;
}
if(times%2==0) {
rows = begin1 - 1;
begin1 = rows;
} else {
rows = begin2 + 1;
begin2 = rows;
}
times++;
}
for(int i=0;i<n;i++) {
for(int k=0;k<n;k++) {
if(k!=n-1) {
std::cout << arr[i][k] << "*";
}
else {
std::cout << arr[i][k] << endl;
}
}
}
for(int i=0;i<n;i++) { //释放二维数组的空间
delete[] arr[i];
}
delete [] arr;
return 0;
}
二 华为
写出一个程序,接受一个十六进制的数值字符串,输出该数值的十进制字符串。(多组同时输入 )。
例如:输入0xA,输出10。
该代码是参考网上非常牛的代码,如下:
#include <iostream>
using namespace std;
int main()
{
int a;
while(cin>>hex>>a){
cout<<a<<endl;
}
}