如:输入 len=5; arr=[1 3 2 1 3]
输出:1 1 3 3 2
int* SortByNum(int* arr, int len)
{
if(arr == NULL || len <= 0)
return NULL;
map<int,int> m;
vector<int> vec;
int max = 0;
for(int i = 0; i< len; i++) //找出出现次数最多的那个赋给max
{
++m[arr[i]];
if(m[arr[i]] > max)
max = m[arr[i]];
}
for(int j = max; j >= 1; j--)
{
for(int p = 0; p <len; p++)
{
if(m[arr[p]] == j)
{
for(int q = 0; q < j; q++)
vec.push_back(arr[p]);
m[arr[p]] = 0; //这步很重要,不要漏了,否则会将已打印的部分多打出来
}
}
}
for(int i = 0; i< len; i++)
arr[i]=vec[i];
return arr;
}
输入数字n,打印阵列,如输入3
输出:1*2*3
6*7*8
4*5*6
void PrintMatrix(int n)
{
int i = 0, j;
int** array = new int*[n];
for(int m = 0; m < n; m++)
array[m] = new int[n];
for(int i = 0; i < (n+1)/2; i++)
{
j = n-1-i;
if(i != j)
{
for(int k = 1; k <= n; k++)
{
array[i][k-1] = 2*i*n + k;
array[j][k-1] = array[i][k-1]+ n;
}
}
if(i == j)
{
for(int k = 1; k <= n; k++)
{
array[i][k-1] = 2*i*n + k;
}
}
}
int p = 0;
for(; p< n; p++)
{
int q = 0;
for(; q < n-1; q++)
{
cout<<array[p][q]<<"*";
}
cout<<array[p][q]<<endl;
}
for(int x=0; x < n; x++)
delete [] array[x];
delete [] array;
}
本题也可先将数组初始化为顺序的,然后先打印奇数行,再打印偶数行的数
杨辉三角形
void YanHui1(int n, vector<int>& temp)
{
if(n == 0)
{
temp.clear();
temp.push_back(1);
return;
}
if(n == 1)
{
temp.clear();
temp.push_back(1);
temp.push_back(1);
return;
}
YanHui1(n-1,temp);
vector<int> temp1;
vector<int>::iterator it = temp.begin();
while(it != temp.end())
{
temp1.push_back(*it);
it++;
}
temp.clear();
for(int i = 0; i <= n; i++)
{
if(i == 0 || i == n)
{
temp.push_back(1);
continue;
}
/*if(i == n)
{
temp.push_back(1);
break;
}*/
temp.push_back(temp1[i-1]+temp1[i]);
}
}
/*输入n,打印如下矩阵,如n=4
1
2*3
4*5*6
7*8*9*10
7*8*9*10
4*5*6
2*3
1
*/
void PrintLike(int n)
{
for(int i = 1; i<= n; i++)
{
int temp = i*(i+1)/2 -i +1;//表示每一行第一个数
for(int j = 1; j< i; j++)
cout<<temp++<<"*";
cout<<temp<<endl;
}
for(int i = n; i>0; i--)
{
int temp = i*(i+1)/2 -i +1;
for(int j = 1; j< i; j++)
cout<<temp++<<"*";
cout<<temp<<endl;
}
}