和尚的奖学金
这类题的常规思路是结构体排序,但是本题由于并没有多种元素,因此用不着结构体,仅仅是数组排序就可以
#include <bits/stdc++.h>
using namespace std;
int n,m,o;
int f[110];
bool cmp(int a,int b)
{
if(a!=b)
return a>b;
}
int main()
{
while(cin>>n>>m>>o)
{
for(int i=0;i<n;i++)
cin>>f[i];
sort(f,f+n,cmp);
for(int i=0;i<m-1;i++)
cout<<f[i]<<" ";
cout<<f[m-1]<<endl;
for(int i=n-1;i>n-o;i--)//注意循环终点
cout<<f[i]<<" ";
cout<<f[n-o]<<endl;
}
return 0;
}
杨辉三角形
先打表,然后直接些就好了
#include <bits/stdc++.h>
using namespace std;
int f[35][35];
int n;
void excel()
{
for(int i=1;i<=30;i++)
{
f[i][1]=1;
f[i][i]=1;
for(int j=2;j<i;j++)
{
f[i][j]=f[i-1][j]+f[i-1][j-1];
}
}
}
int main()
{
while(cin>>n)
{
excel();
for(int i=1;i<=n;i++)
{
for(int j=1;j<i;j++)
{
if(f[i][j]!=0)
cout<<f[i][j]<<" ";
}
cout<<f[i][i]<<endl;
}
}
return 0;
}
2的n次方
不要想的太简单了,我一开始直接写了一个快速幂,结果是不对的,要算到100次方,需要高精度计算,因此还是应该放到数组里去计算,方法类似于高精度乘法
#include <bits/stdc++.h>
using namespace std;
const int x=2;
int main()
{
int n,k,t;//k在每次循环中暂时接收数组内每一位计算后的结果,t标记从a[0]开始第一个不为0的数的下标
while(cin>>n)
{
int a[1000]={0};//清空数组
int b=0;//记录进位值
a[999]=1;//把数组的最后一位先赋值为1,用于做被乘数
for(int i=0;i<n;i++)
{
int j=999;
while(j>=0)
{
k=a[j]*x+b;
a[j]=k%10;
b=k/10;
j--;
}
}
for(int i=0;i<1000;i++)
{
if(a[i]!=0)
{
t=i;
break;
}
}
for(int i=t;i<1000;i++)
cout<<a[i];
cout<<endl;
}
return 0;
}