#include <iostream>
#include <stdio.h>
#include <cstdio>
#include <string>
#include <string.h>
#include <math.h>
#include <algorithm>
#include <stack>
using namespace std;
#define maxSize 101
//
简单递归,算年龄 P158 5.11
//int age(int n)
//{
// if(n==5)
// return 1;
// else
// return age(n+1)+2;
//}
//int main()
//{
// int n;
// cout<<age(1)<<endl;
//}
//
//
希尔排序 P161 5.15
//void BubbleSort(int a[],int low,int high,int jump)
//{
// int flag=0;
// for(int i=low;i<high-jump;i+=jump)
// {
// for(int j=low;j<high-i-jump;j+=jump)
// {
// if(a[j+jump]<a[j])
// {
// int t=a[j+jump];
// a[j+jump]=a[j];
// a[j]=t;
// flag=1;
// }
// }
// if(flag==0)
// {
// return;
// }
// }
//}
//
//void ShellSort(int a[],int n)
//{
// int i=0;
// int jump=n;
// while(jump>1)
// {
// jump=jump/2;
// for(int i=0;i<jump;i++) //对每个子序列采用某种已知的排序算法排序
// {
// BubbleSort(a,i,n,jump);
// }
// }
//}
//
//int main()
//{
// int n;
// cin>>n;
// int a[101];
// for(int i=0;i<n;i++)
// {
// cin>>a[i];
// }
// ShellSort(a,n);
// for(int i=0;i<n;i++)
// cout<<a[i]<<" ";
//}
将字符串转化为数字 P165
//int Transfer(char ch[],int len)
//{
// int cnt=0;
// for(int i=len-1;i>=0;i--)
// {
// cnt+=(ch[i]-'0')*pow(10,len-1-i);
// }
// return cnt;
//}
//int main()
//{
// char ch[maxSize];
// cin>>ch;
// int i=0,len=0;
// while(ch[i]!='\0')
// {
// i++;
// }
// int d=Transfer(ch,i);
// cout<<d<<endl;
//}
//
//
//
将一个偶数分解成两个素数之和 P179 5.27
//int Judge(int n) //判断是否是素数
//{
// for(int i=2;i<=sqrt(n);i++)
// {
// if(n%i==0)
// return 0;
// }
// return 1;
//}
//int main()
//{
// int n;
// cin>>n;
// for(int i=2;i<=n/2;i++)
// {
// if(Judge(i)==1&&Judge(n-i)==1)
// {
// cout<<n<<"="<<i<<"+"<<n-i<<endl;
// }
// }
//}
//
int a[101][101];
int k;
void MakeLine(int row_start,int col_start,int row_end)
{
int i,j,sign=(row_end>row_start)?1:-1;
for(i=row_start,j=col_start;(row_end-i)*sign>=0;i+=sign,j+=sign)
{
a[i][j]=k++;
}
}
void MakeArray(int n)
{
int d;
for(d=1;d<=2*n+1;d++)
{
if(d<=n)
{
if(d%2)
{
MakeLine(n,d-1,n+1-d);
}
else
{
MakeLine(n+1-d,0,n);
}
}
else
{
if(d%2)
{
MakeLine(2*n+1-d,n,0);
}
else
{
MakeLine(0,d-n-1,2*n+1-d);
}
}
}
}
//将自然数存入矩阵中 P181 5.28
int main()
{
int N;
for(int N=3;N<=10;N++)
{
k=1;
int n=N-1;
MakeArray(n);
printf("\n N= %d:\n",n+1);
for(int i=0;i<=n;i++)
{
for(int j=0;j<=n;j++)
{
printf("% 4d",a[i][j]);
}
cout<<endl;
}
}
}
求积分的面积 P182 5.2。辛普森算法
//double f(double x)
//{
// return exp(x);
//}
//double Simpson(double a,double b)
//{
// double s=f(a)-f(b);
// double h=(b-a)/10;
// double x=a;
// do
// {
// x=x+h/2;
// s=s+4*f(x);
// x=x+h/2;
// s=s+2*f(x);
// }while(x<b);
// s=s*h/6;
// return s;
//}
//int main()
//{
// double a,b,s;
// cin>>a>>b;
// s=Simpson(a,b);
// cout<<s<<endl;
//}
求体积,面积 P184 5.30
//int Volume(int l,int w,int h)
//{
// return l*w*h;
//}
//int Sqare1(int h,int l) //正面积
//{
// return h*l;
//}
//int Sqare2(int h,int w) //侧面积
//{
// return h*w;
//}
//int Sqare3(int l,int w) //顶面积
//{
// return l*w;
//}
//int main()
//{
// int l,w,h;
// cin>>l>>w>>h;
// int v1,s1,s2,s3;
// v1=Volume(l,w,h);
// s1=Sqare1(h,l);
// s2=Sqare2(h,w);
// s3=Sqare3(l,w);
// cout<<v1<<" "<<s1<<" "<<s2<<" "<<s3<<endl;
//}
//
//
给出年月日,计算第几天 P185 5.32
//int Yeap(int y)
//{
// if(y%400==0||(y%100!=0&&y%4==0))
// {
// return 1;
// }
// return 0;
//}
//int month[13][2]={
// 0,0,
// 31,31,
// 28,29,
// 31,31,
// 30,30,
// 31,31,
// 30,30,
// 31,31,
// 31,31,
// 30,30,
// 31,31,
// 30,30,
// 31,31,
//};
//void nextDay(int &y,int &m,int &d)
//{
// d++;
// if(d>month[m][Yeap(y)])
// {
// d=1;
// m++;
// if(m>12)
// {
// m=1;
// y++;
// }
// }
//}
//int buf[3001][13][32];
//int main()
//{
// int y0=0,m0=0,d0=0,cnt=0;
// while(y0!=3001)
// {
// buf[y0][m0][d0]=cnt;
// nextDay(y0,m0,d0);
// cnt++;
// }
// int year,month,day;
// cin>>year>>month>>day;
// cout<<buf[year][month][day]-buf[year][1][1]+1;
//}
//
//
//
求出两位数的绝对素数 P187 5.35
//int Judge(int n)
//{
// for(int i=2;i<n;i++)
// {
// if(n%i==0)
// return 0;
// }
// return 1;
//}
//int Reverse(int n)
//{
// int t1=n%10;
// int t2=n/10;
// int cnt=t1*10+t2;
// return cnt;
//}
//int main()
//{
// for(int i=10;i<100;i++)
// {
// int t=Reverse(i);
// if(Judge(i)==1&&Judge(t)==1)
// {
// cout<<i<<" ";
// }
// }
//}
//
//
//
求和和平均值 P188 1
//int main()
//{
// int n;
// double a[maxSize];
// cin>>n;
// double sum=0,avg=0;
// for(int i=0;i<n;i++)
// {
// cin>>a[i];
// sum+=a[i];
// }
// avg=sum/n;
// cout<<sum<<" "<<avg<<endl;
//
//}
//
//
//
将数组从大到小排序,去掉重复的元素 P188 2
//int main()
//{
// int n,a[maxSize];
// cin>>n;
// for(int i=0;i<n;i++)
// {
// cin>>a[i];
// }
// for(int i=n-1;i>=1;i--)
// {
// for(int j=1;j<=i;j++) //j从1开始
// {
// if(a[j-1]<a[j])
// {
// int t=a[j-1];
// a[j-1]=a[j];
// a[j]=t;
// }
// }
// }
//
// cout<<a[0];
// for(int i=1;i<n;i++)
// {
// if(a[i]!=a[i-1])
// {
// cout<<" "<<a[i];
// }
// }
//
//}
//
//
//
将字符串反序存放输出 P188 3
//int main()
//{
// char ch[maxSize];
// cin>>ch;
// char ch2[maxSize];
// int len=0;
// for(int i=0;ch[i]!='\0';i++)
// {
// len++;
// }
// for(int i=0;i<len;i++)
// {
// ch2[i]=ch[len-1-i];
// }
// cout<<ch2<<endl;
//}
//
//
//
求出每个大学生的总分,每门课程的平均分,最高分学生的姓名和总分 P188 4
//typedef struct Student
//{
// char name[maxSize];
// int score0[maxSize],score;
//}Student;
//int main()
//{
// int n;
// cin>>n;
// Student s[maxSize];
// for(int i=0;i<n;i++)
// {
// cin>>s[i].name;
// for(int j=0;j<4;j++)
// {
// cin>>s[i].score0[j];
// s[i].score+=s[i].score0[j];
// }
// cout<<s[i].score<<" ";
// }
// double s2[maxSize];
// for(int j=0;j<4;j++)
// {
// for(int i=0;i<n;i++)
// {
// s2[j]+=s[i].score0[j];
// }
// cout<<s2[j]/n<<" ";
// }
// int max=0,maxp=0;
// for(int i=0;i<n;i++)
// {
// if(s[i].score>max)
// {
// max=s[i].score;
// maxp=i;
// }
// }
// cout<<s[maxp].name<<" "<<s[maxp].score<<endl;
//}
//
//5
//zs 78 89 90 87
//344 ls 89 67 79 80
//315 ww
//67 78 95 74
//314 ze
//98 67 90 63
//318 cj
//88 77 85 74
//324 84 75.6 87.8 75.6 zs 344
//
//
//
//
证明哥德巴赫猜想 任何一个充分大的偶数,总可以表示成两个素数之和 P188 5
//int Sushu(int n)
//{
// for(int i=2;i<=sqrt(n);i++)
// {
// if(n%i==0)
// return 0;
// }
// return 1;
//}
//int main()
//{
// int n;
// cin>>n;
// for(int i=2;i<=n/2;i++) //只写到n/2处
// {
// int t=n-i;
// if(Sushu(i)==1&&Sushu(t)==1)
// {
// cout<<n<<"可以表示为两个素数"<<i<<"和"<<t<<"之和"<<endl;
// }
// }
//}
//
//
//
输出一个十进制数,输出相应的二进制数、八进制数、十六进制数 P188 6
//void Binary(int n)
//{
// int stack[maxSize];
// int top=-1;
// while(n)
// {
// stack[++top]=n%2;
// n=n/2;
// }
// while(top!=-1)
// {
// cout<<stack[top--];
// }
// cout<<endl;
//}
//void Eight(int n)
//{
// int stack[maxSize];
// int top=-1;
// while(n)
// {
// stack[++top]=n%8;
// n=n/8;
// }
// while(top!=-1)
// {
// cout<<stack[top--];
// }
// cout<<endl;
//}
//void Hex(int n)
//{
// int stack[maxSize];
// int top=-1;
// while(n)
// {
// stack[++top]=n%16;
// n=n/16;
// }
// while(top!=-1)
// {
// int t=stack[top--];
// if(t>=0&&t<=9)
// {
// cout<<t;
// }
// else if(t>9)
// {
// printf("%c",t-10+'A');
// }
// }
//}
//int main()
//{
// int n;
// cin>>n;
// Binary(n);
// Eight(n);
// Hex(n);
//}
//
//
//
用递归法求n! P188 7
//int Calu(int n)
//{
// if(n==1)
// return 1;
// else
// return n*Calu(n-1);
//}
//int main()
//{
// int n;
// cin>>n;
// cout<<Calu(n);
//}
//
//
//
返回数字的第k个值 P188 8
//int digit(int n,int k)
//{
// int a[maxSize];
// int len=0;
// int t=n;
// while(t)
// {
// a[len++]=t%10;
// t=t/10;
// }
// if(k<=len)
// {
// return a[k-1];
// }
// else
// return 0;
//
//}
//int main()
//{
// int n,k;
// cin>>n>>k;
// int d=digit(n,k);
// cout<<d<<endl;
//}
//
//
给出年月日,回答是星期几 P188 9
//int Yeap(int n)
//{
// if(n%400==0||(n%4==0&&n%100!=0))
// {
// return 1;
// }
// return 0;
//}
//int month[14][2]={0,0,
// 31,31,
// 28,29,
// 31,31,
// 30,30,
// 31,31,
// 30,30,
// 31,31,
// 31,31,
// 30,30,
// 31,31,
// 30,30,
// 31,31,
//};
//void nextDay(int &y,int &m,int &d)
//{
// d++;
// if(d>month[m][Yeap(y)])
// {
// d=1;
// m++;
// if(m>12)
// {
// m=1;
// y++;
// }
// }
//}
//int buf[3001][13][32];
//int main()
//{
// int y,m,d;
// int y0=0,m0=0,d0=0;
// int cnt=0;
// while(y0<3001)
// {
// nextDay(y0,m0,d0);
// cnt++;
// buf[y0][m0][d0]=cnt;
// }
// cin>>y;
// if(y<0||y>3001)
// {
// cout<<"请输入正确年份!"<<endl;
// exit(1);
// }
// cin>>m;
// if(m>12||m<0)
// {
// cout<<"输入正确月份!"<<endl;
// exit(1);
// }
// cin>>d;
// if(d<28||d>31)
// {
// cout<<"输入正确的日份"<<endl;
// exit(1);
// }
//
//}
//
求给定五个数中的最大值 P188 10
//int main()
//{
// int n;
// cin>>n;
// int a[maxSize];
// int max=0,maxp=0;
// for(int i=0;i<n;i++)
// {
// cin>>a[i];
// if(a[i]>max)
// {
// max=a[i];
// maxp=i;
// }
// }
// cout<<max<<" "<<maxp<<endl;
//}
//
//
//
//
打印出正切函数表 P188 11
//#define pi 3.1415926
//int main()
//{
// for(int i=0;i<=360;i+=10)
// {
// double t=(i*pi)/180;
// // cout<<i<<" "<<tan(t)<<endl;
// printf("%d %.4f\n",i,tan(t));
// }
//}
//
//
//
用递归的方法求幂函数 P188 12
//int Calu(int m,int n)
//{
// if(n==0)
// return 1;
// else
// return m*Calu(m,n-1);
//}
//int main()
//{
// int m,n;
// cin>>m>>n;
// cout<<Calu(m,n);
//}
//
打印杨辉三角 P188 13
//#define N 30
//int main()
//{
// int n;
// int a[N][N];
// cin>>n;
// for(int i=0;i<N;i++)
// {
// for(int j=0;j<N;j++)
// {
// a[i][j]=0;
// }
// }
// for(int i=1;i<N;i++)
// {
// for(int j=1;j<N;j++)
// {
// if(i==1&&j==N/2)
// {
// a[i][j]=1;
// }
// else
// {
// a[i][j]=a[i-1][j-1]+a[i-1][j+1];
// }
// }
// }
// for(int i=0;i<n+2;i++)
// {
// for(int j=0;j<N;j++)
// {
// if(a[i][j]==0) //值为0就打印空格,否则打印数值
// cout<<" ";
// else
// cout<<a[i][j];
// }
// cout<<endl;
// }
//}
//
//
用递归的方法,输出一个数的逆序十进制数 P189 14
//void Output(int n)
//{
// if(n!=0)
// {
// cout<<
// }
//}
//int main()
//{
// int n;
// cin>>n;
// Output(n);
//}
//
//
//
将八进制转化为十进制,将十进制转化为八进制 P189 15
//void readoctal(int ch[],int len,int &n) //8转10
//{
// for(int i=0;i<len;i++)
// {
// n+=ch[i]*pow(8,i);
// }
//}
//
//void writeoctal(int ch[],int &len,int n) //10转8
//{
// while(n)
// {
// int t=n%8;
// n=n/8;
// ch[len]+=t;
// if(ch[len]>=8)
// {
// ch[len]-=8;
// ch[len+1]++;
// }
// len++;
// }
//
//}
//int main()
//{
// int n;
// cin>>n;
// int len=0;
// int ch[maxSize];
// for(int i=0;i<maxSize;i++)
// ch[i]=0;
// writeoctal(ch,len,n);
// for(int i=len-1;i>=0;i--)
// cout<<ch[i];
// cout<<endl;
// n=0;
// readoctal(ch,len,n);
// cout<<n<<endl;
//}