#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
判断一串数是否是回文数 P111 例4.3
//int Judge(string str,int n)
//{
// char stack[maxSize];
// int top=-1;
// for(int i=0;i<n;i++)
// {
// stack[++top]=str[i];
// }
// int j=0;
// while(top!=-1)
// {
// char t=stack[top--];
// if(t!=str[j])
// {
// return 0;
// }
// else
// {
// j++; //记得变量++!!
// }
// }
// return 1;
//}
//int main()
//{
// string str;
// cin>>str;
// int d=Judge(str,str.length());
// if(d==1)
// {
// cout<<"是回文数"<<endl;
// }
// else
// {
// cout<<"不是回文数"<<endl;
// }
//}
//
//
//
//
冒泡排序 P112 例4.4
//int main()
//{
// int n,a[maxSize];
// cin>>n;
// for(int i=0;i<n;i++)
// cin>>a[i];
// int flag=0;
// for(int i=0;i<n;i++)
// {
// for(int j=i+1;j<n;j++)
// {
// if(a[i]>a[j])
// {
// int t=a[i];
// a[i]=a[j];
// a[j]=t;
// flag=1;
// }
// }
// if(flag==0)
// break;
// }
// for(int i=0;i<n;i++)
// cout<<a[i]<<" ";
//}
//
//
//
选择排序 P112 例4.4
//int main()
//{
// int n,a[maxSize];
// cin>>n;
// for(int i=0;i<n;i++)
// cin>>a[i];
// for(int i=0;i<n-1;i++)
// {
// int min=a[i];
// int k=i;
// for(int j=i+1;j<n;j++)
// {
// if(a[j]<min)
// {
// min=a[j];
// k=j;
// }
// }
// if(k!=i)
// {
// int t=a[i];
// a[i]=a[k];
// a[k]=t;
// }
// }
// for(int i=0;i<n;i++)
// cout<<a[i]<<" ";
//}
//
//
//
输出1-1000以内的所有完全数(数值大小等于其所有因子之和) P115 例4.5
//int Judge(int arr[],int n,int &k)
//{
// int cnt=0;
// for(int i=1;i<n;i++)
// {
// if(n%i==0)
// {
// cnt+=i;
// arr[k]=i;
// k++;
// }
// }
// if(cnt==n)
// {
// return 1;
// }
// return 0;
//}
//int main()
//{
// for(int i=1;i<=1000;i++)
// {
// int arr[maxSize];
// for(int i=0;i<maxSize;i++)
// arr[i]=0;
// int k=0;
// int d=Judge(arr,i,k);
// if(d==1)
// {
// cout<<i<<" it's factor are ";
// for(int j=0;j<k;j++)
// {
// cout<<" "<<arr[j];
// }
// cout<<endl;
// }
// }
//}
//
//
//
荷兰国旗问题 P116 例4.6 按红(0) 白(1) 蓝(2)排列
//void Sort(int a[],int n)
//{
// int i=0,j=0,k=n-1; //都赋值为0
// while(j<=k)
// {
// if(a[j]==0)
// {
// int t=a[i];
// a[i]=a[j];
// a[j]=t;
// i++;
// j++; //j也要向后移动
// }
// else if(a[j]==1)
// {
// j++;
// }
// else if(a[j]==2)
// {
// int t=a[j];
// a[j]=a[k];
// a[k]=t;
// k--;
// }
//
// }
//}
//int main()
//{
// int n;
// int a[maxSize];
// cin>>n;
// for(int i=0;i<n;i++)
// {
// cin>>a[i];
// }
// Sort(a,n);
// for(int i=0;i<n;i++)
// {
// cout<<a[i]<<" ";
// }
//}
//
//
//
从终端输入五个人的名字,存入二维数组然后显示出来 P120 例4.7
//int main()
//{
// char name[maxSize][maxSize];
// int n;
// cin>>n;
// getchar();
// for(int i=0;i<n;i++)
// {
// gets(name[i]);
// }
// for(int i=0;i<n;i++)
// {
// puts(name[i]);
// }
//}
//
//
//
将4阶方阵转置 P121 例4.8
//int main()
//{
// int n,a[maxSize][maxSize];
// cin>>n;
// for(int i=0;i<n;i++)
// {
// for(int j=0;j<n;j++)
// {
// cin>>a[i][j];
// }
// }
// for(int i=0;i<n;i++)
// {
// for(int j=i+1;j<n;j++)
// {
// int t=a[i][j]; //不要把原来的元素覆盖了
// a[i][j]=a[j][i];
// a[j][i]=t;
// }
// }
// for(int i=0;i<n;i++)
// {
// for(int j=0;j<n;j++)
// {
// cout<<a[i][j]<<" ";
// }
// cout<<endl;
// }
//}
//
//
//
//
矩阵乘法 P123 例4.9
//int main()
//{
// int m,n,p;
// cin>>m>>n>>p;
// int a[maxSize][maxSize];
// int b[maxSize][maxSize];
// int c[maxSize][maxSize];
// for(int i=0;i<m;i++)
// {
// for(int j=0;j<p;j++)
// {
// cin>>a[i][j];
// }
// }
// for(int i=0;i<p;i++)
// {
// for(int j=0;j<n;j++)
// {
// cin>>b[i][j];
// }
// }
// for(int i=0;i<m;i++)
// {
// for(int j=0;j<n;j++)
// {
// c[i][j]=0;
// }
// }
// for(int i=0;i<m;i++)
// {
// for(int j=0;j<n;j++)
// {
// for(int k=0;k<p;k++)
// {
// c[i][j]+=a[i][k]*b[k][j];
// }
// }
// }
// for(int i=0;i<m;i++)
// {
// for(int j=0;j<n;j++)
// {
// cout<<c[i][j]<<" ";
// }
// cout<<endl;
// }
//}
//
//2 2 3
//1 2 3
//3 4 5
//1 3
//2 4
//3 5
//14 26
//26 50
//
//
//
求一个二维数组中的最大值,以及最大值所在的行和列 P124 例4.10
//int main()
//{
// int n;
// cin>>n;
// int a[maxSize][maxSize];
// for(int i=0;i<n;i++)
// {
// for(int j=0;j<n;j++)
// {
// cin>>a[i][j];
// }
// }
// int max=0;
// int maxI=0;
// int maxJ=0;
// for(int i=0;i<n;i++)
// {
// for(int j=0;j<n;j++)
// {
// if(a[i][j]>max)
// {
// max=a[i][j];
// maxI=i;
// maxJ=j;
// }
// }
// }
// cout<<max<<" "<<maxI<<" "<<maxJ<<endl;
//}
//
//4
//10 11 12 13
//14 15 16 17
//18 19 11 12
//24 25 27 26
//27 3 2
//
//
//
//
用字符数组存放字符串,并输出字符数组 P126 例4.11
//int main()
//{
// string str="Hello";
// char ch[maxSize];
// for(int i=0;i<str.length();i++)
// {
// ch[i]=str[i];
// }
// for(int i=0;i<str.length();i++)
// cout<<ch[i];
//}
//
//
//
任意给定一个字符串,从该串中删除指定的字符后输出 P128 例4.12
//int main()
//{
// char str[maxSize];
// cin>>str; //cin不接收空格,gets接收空格
// char ch;
// cin>>ch;
// for(int i=0;str[i]!='\0';i++)
// {
// if(str[i]==ch)
// {
// int j;
// for(j=i+1;str[j]!='\0';j++)
// {
// str[j-1]=str[j];
// }
// str[j-1]='\0'; //把多余的字符置空
// }
// }
// for(int i=0;str[i]!='\0';i++)
// cout<<str[i];
//}
//
//
//
将一个字符串颠倒过来 P132 例4.16
//int main()
//{
// char ch[maxSize];
// cin>>ch;
// int len=0;
// for(int i=0;ch[i]!='\0';i++)
// {
// len++;
// }
// int i=0;
// int j=len-1;
// while(i<j) //bug:不要使用for循环两边交换的方法!!交换两遍就是原来的数组!!
// {
// int t=ch[i];
// ch[i]=ch[j];
// ch[j]=t;
// i++;
// j--;
// }
// cout<<ch;
//}
//
//
//
//
//
将一个字符串复制到另一个字符串中
//int main()
//{
// char ch[maxSize],ch2[maxSize];
// gets(ch);
// for(int i=0;ch[i]!='\0';i++)
// {
// ch2[i]=ch[i];
// }
// puts(ch2);
//}
//
//
//
将电文翻译成密码 P133例4.18
//int main()
//{
// char ch[maxSize];
// gets(ch);
// int key;
// cin>>key;
// int flag=0;
// for(int i=0;ch[i]!='\0';i++)
// {
// if(ch[i]!=' ')
// {
// int t=ch[i]-'A'+1+key;
// if(t<=0)
// {
// t=t+26;
// }
// else if(t>26)
// {
// t=t-26;
// }
// if(flag==1)
// cout<<","<<t;
// else
// {
// cout<<t;
// flag=1;
// }
// }
// else
// {
// cout<<".";
// flag=0;
// }
// }
// cout<<","<<key<<endl;
//}
//
//
//
计算正整数m的所有因子,因子之和,以及因子个数 P134 例4.19
//int Print(int m,int fac[],int &cp)
//{
// int sum=0;
// for(int i=1;i<m;i++)
// {
// if(m%i==0)
// {
// fac[cp++]=i;
// sum+=i;
// }
// }
// return sum;
//}
//int main()
//{
// int m;
// cin>>m;
// int fac[maxSize];
// int cp=0;
// int d=Print(m,fac,cp);
// cout<<d<<" ";
// for(int i=0;i<cp;i++)
// {
// cout<<fac[i]<<" ";
// }
// cout<<cp<<endl;
//}
//
从文件中读入,计算各个班级的得分并排序 P136 例4.20
//typedef struct Class
//{
// int score[101];
// int s;
//}Class;
//bool cmp(Class a,Class b)
//{
// return a.s>b.s;
//}
//int main()
//{
// int n,ns;
// Class c[101];
// cin>>n>>ns;
// for(int i=0;i<n;i++)
// {
// int sum=0;
// for(int j=0;j<ns;j++)
// {
// cin>>c[i].score[j];
// sum+=c[i].score[j];
// }
// c[i].s=sum;
// }
// sort(c,c+n,cmp);
// for(int i=0;i<n;i++)
// {
// cout<<c[i].s<<endl;
// for(int j=0;j<ns;j++)
// {
// cout<<c[i].score[j]<<" ";
// }
// cout<<endl;
// }
//}
//4
//3
//34 45 67
//67 89 32
//34 56 90
//67 23 12
//188
//67 89 32
//180
//34 56 90
//146
//34 45 67
//102
//67 23 12
//P138 例4.21。打印阶乘
//加法代替乘法
int main()
{
int n;
cin>>n;
int a[101],b[101];
for(int i=0;i<101;i++)
a[i]=0;
a[0]=1;
cout<<"1!="<<a[0]<<endl;
for(int j=2;j<=n;j++)
{
for(int i=0;i<101;i++)
{
b[i]=a[i];
}
for(int m=1;m<j;m++)
{
for(int i=0;i<101;i++)
{
int r=a[i]+b[i];
if(r>9)
{
a[i+1]++;
}
a[i]=r%10;
}
}
int max=100;
while(a[max]==0)
max--;
cout<<j<<"!=";
for(int i=max;i>=0;i--)
{
cout<<a[i];
}
cout<<endl;
}
}
P139 1
//int main()
//{
// double x,y;
// cin>>x;
// y=sin(x)*sin(x)*2+5*sin(x*x);
// cout<<y;
//}
//
//
//
把一个数插入到数组中正确的位置
//int main()
//{
// int n;
// cin>>n;
// int a[maxSize];
// for(int i=0;i<n;i++)
// a[i]=2*i+1;
// int x;
// cin>>x;
// int k=0;
// while(k<n)
// {
// if(a[k]<n)
// {
// k++;
// }
// else
// break;
// }
// for(int i=n-1;i>=k;i--) //一定要从后往前赋值
// {
// a[i+1]=a[i];
// }
// a[k]=x;
// for(int i=0;i<n+1;i++)
// cout<<a[i]<<" ";
//}
//
//
//
//
删除数组中的一个元素 P139 3
//int main()
//{
// int n;
// cin>>n;
// int a[maxSize];
// for(int i=0;i<n;i++)
// a[i]=2*i+1;
// int x;
// cin>>x;
// int k;
// for(int i=0;i<n;i++)
// {
// if(a[i]==x)
// {
// k=i;
// }
// }
// for(int i=k+1;i<n;i++)
// {
// a[i-1]=a[i];
// }
// for(int i=0;i<n-1;i++)
// {
// cout<<a[i]<<" ";
// }
//}
//
//
//
输入一串字符串,分别统计字符串中0,1,2...9出现的次数 P139 4
//int main()
//{
// int a[maxSize];
// char ch[maxSize];
// int i=0;
// while((ch[i]=getchar())!='$')
// {
// i++;
// }
// for(int i=0;ch[i]!='\0';i++)
// {
// if(ch[i]-'0'>=0&&ch[i]-'0'<=9)
// {
// a[ch[i]-'0']++;
// }
// }
// for(int i=0;i<=9;i++)
// {
// cout<<a[i]<<" ";
// }
//}
//
//
//#include <map>
//bool cmp(char a,char b) //定义排序规则
//{
// return a>b;
//}
//
//
统计大写字母出现的次数,并按字母出现次数排序输出 P139 5
//int main()
//{
// char ch[maxSize];
// cin>>ch;
// int cnt[maxSize];
// for(int i=0;ch[i]!='\0';i++)
// {
// if(ch[i]>='A'&&ch[i]<='Z')
// {
// cnt[ch[i]-'A']++;
// }
// }
// sort(cnt,cnt+26,cmp);
// for(int i=0;i<26;i++)
// {
// if(cnt[i]!=0)
// {
// cout<<cnt[i]<<" ";
// }
// }
//}
//
//
//
用筛选法求出100以内的素数 P140 6
//int prime[maxSize];
//int primeSize;
//bool mark[maxSize];
//void init()
//{
// primeSize=0;
// for(int i=2;i<=100;i++)
// {
// if(mark[i]==true)
// {
// continue;
// }
// prime[primeSize++]=i;
// for(int j=i*i;j<=100;j+=i)
// {
// mark[j]=true;
// }
// }
//}
//int main()
//{
// init();
// for(int i=0;i<=primeSize;i++)
// {
// cout<<prime[i]<<" ";
// }
//}
//
//
//
给出冒泡排序后元素对应的原来在数组中的位置 P140 7
//int main()
//{
// int n;
// int a[maxSize],pos[maxSize];
// cin>>n;
// for(int i=0;i<n;i++)
// {
// cin>>a[i];
// pos[i]=i;
// }
// int flag;
// for(int i=n-1;i>=1;i--)
// {
// flag=0;
// for(int j=1;j<=i;j++)
// {
// if(a[j-1]>a[j])
// {
// int t=a[j-1];
// a[j-1]=a[j];
// a[j]=t;
// flag=1;
//
// t=pos[j-1]; //交换pos的值!!!
// pos[j-1]=pos[j];
// pos[j]=t;
// }
// }
// if(flag==0)
// break;
// }
// for(int i=0;i<n;i++)
// {
// cout<<a[i]<<" "<<pos[i]<<endl;
// }
//}
//
//
//
将两个数组相同元素放到c中,a特有的元素放到d,b特有的元素放到e
//int main()
//{
// int a[maxSize],b[maxSize],c[maxSize],d[maxSize],e[maxSize],aHas[maxSize],bHas[maxSize];
// int n1,n2;
// cin>>n1>>n2;
// for(int i=0;i<n1;i++)
// {
// cin>>a[i];
// aHas[a[i]]=1;
// }
// for(int i=0;i<n2;i++)
// {
// cin>>b[i];
// bHas[b[i]]=1;
// }
// int k=0,k1=0,k2=0;
// for(int i=0;i<n1;i++)
// {
// if(aHas[a[i]]==1&&bHas[a[i]]==1) //只在算a数组时写一遍,若在算b数组时也写一遍,则会翻两倍
// {
// c[k++]=a[i];
// }
// else if(aHas[a[i]]==1&&bHas[a[i]]==0)
// {
// d[k1++]=a[i];
// }
// }
// for(int i=0;i<n2;i++)
// {
// if(aHas[b[i]]==0&&bHas[b[i]]==1)
// {
// e[k2++]=b[i];
// }
// }
// for(int i=0;i<k;i++)
// cout<<c[i]<<" ";
// cout<<endl;
// for(int i=0;i<k1;i++)
// cout<<d[i]<<" ";
// cout<<endl;
// for(int i=0;i<k2;i++)
// cout<<e[i]<<" ";
//
//}
//
//
//
//
打印矩阵 P141 11
//int main()
//{
// int n;
// cin>>n;
// int a[maxSize][maxSize];
// for(int i=0;i<n;i++)
// {
// for(int j=0;j<n;j++)
// {
// if(i>=j)
// {
// a[i][j]=1;
// }
// else if(j-i==1)
// {
// a[i][j]=2;
// }
// else if(j-i==2)
// {
// a[i][j]=3;
// }
// else if(j-i==3)
// {
// a[i][j]=4;
// }
// else
// a[i][j]=5;
// }
// }
// for(int i=0;i<n;i++)
// {
// for(int j=0;j<n;j++)
// {
// cout<<a[i][j]<<" ";
// }
// cout<<endl;
// }
// for(int i=0;i<n;i++)
// {
// for(int j=0;j<n;j++)
// {
// if(i!=j)
// {
// a[i][j]=0;
// }
// }
// }
// for(int i=0;i<n;i++)
// {
// for(int j=0;j<n;j++)
// {
// cout<<a[i][j]<<" ";
// }
// cout<<endl;
// }
//
//}
//
//
//
//
找出数组最值大小和下标,并排序 P141 12
//int main()
//{
// int n,a[maxSize];
// cin>>n;
// for(int i=0;i<n;i++)
// {
// cin>>a[i];
// }
// int min=a[0],max=a[0],minp=0,maxp=0;
// for(int i=1;i<n;i++)
// {
// if(a[i]<min)
// {
// min=a[i];
// minp=i;
// }
// if(a[i]>max)
// {
// max=a[i];
// maxp=i;
// }
// }
// cout<<max<<" "<<maxp<<endl;
// cout<<min<<" "<<minp<<endl;
// int flag=0;
// for(int i=n-1;i>=1;i--)
// {
// flag=0;
// for(int j=0;j<=i;j++)
// {
// if(a[j-1]<a[j])
// {
// int t=a[j-1];
// a[j-1]=a[j];
// a[j]=t;
// flag=1;
// }
// }
// if(flag==0)
// break;
// }
// for(int i=0;i<n;i++)
// cout<<a[i]<<" ";
//}
//
//
//
//
对方阵进行运算 P141 13
//int main()
//{
// int n,a[maxSize][maxSize];
// cin>>n;
// for(int i=0;i<n;i++)
// {
// for(int j=0;j<n;j++)
// {
// cin>>a[i][j];
// }
// }
// for(int i=0;i<n;i++)
// {
// for(int j=0;j<n;j++)
// {
// cout<<a[i][j]<<" ";
// }
// cout<<endl;
// }
// int sum1=0,mul1=1,sum2=0,sum3=0;
// for(int i=0;i<n;i++)
// {
// sum1+=a[i][i]+a[i][5-i];
// mul1*=a[i][i]*a[i][5-i];
// }
// for(int i=0;i<n;i++)
// {
// for(int j=0;j<n;j++)
// {
// if(i==0||j==0||i==n-1||j==n-1)
// {
// sum2+=a[i][j];
// }
// }
// }
// for(int i=0;i<n;i++)
// {
// for(int j=0;j<n;j++)
// {
// if(i!=0&&j!=0&&i!=n-1&&j!=n-1)
// {
// sum3+=a[i][j];
// }
// }
// }
// cout<<sum1<<" "<<mul1<<" "<<sum2<<" "<<sum3<<endl;
// for(int i=0;i<n;i++)
// {
// for(int j=0;j<n;j++)
// {
// if(i==j||i+j==n-1)
// {
// a[i][j]=1;
// }
// else
// a[i][j]=0;
// }
// }
// for(int i=0;i<n;i++)
// {
// for(int j=0;j<n;j++)
// {
// cout<<a[i][j]<<" ";
// }
// cout<<endl;
// }
//}
//
//6
//1 2 3 4 5 6
//6 5 4 3 2 1
//1 4 7 8 5 2
//2 5 8 7 4 1
//1 2 3 6 9 9
//6 3 2 1 5 2
//
//1 2 3 4 5 6
//6 5 4 3 2 1
//1 4 7 8 5 2
//2 5 8 7 4 1
//1 2 3 6 9 9
//6 3 2 1 5 2
//
//63 40642560 63 82
//
//1 0 0 0 0 1
//0 1 0 0 1 0
//0 0 1 1 0 0
//0 0 1 1 0 0
//0 1 0 0 1 0
//1 0 0 0 0 1
//
//
//
//
连接字符串 P141 14
//int main()
//{
// char str1[maxSize],str2[maxSize];
// cin>>str1>>str2;
// int len=0;
// for(int i=0;str1[i]!='\0';i++)
// {
// len++;
// }
// for(int i=0;str2[i]!='\0';i++)
// {
// str1[len++]=str2[i];
// }
// for(int i=0;str1[i]!='\0';i++)
// cout<<str1[i];
//}
//
//
//
将数组逆序存放 P141 16
//int main()
//{
// int n;
// cin>>n;
// int a[maxSize];
// for(int i=0;i<n;i++)
// {
// cin>>a[i];
// }
// int i=0;
// int j=n-1;
// while(i<j)
// {
// int t=a[i];
// a[i]=a[j];
// a[j]=t;
// i++;
// j--;
// }
// for(int i=0;i<n;i++)
// cout<<a[i]<<" ";
//}
//
//
//
约瑟夫问题 P141 17
//typedef struct LinkList
//{
// int data;
// struct LinkList *next;
//}LinkList;
//int main()
//{
// int m,n;
// cin>>m>>n;
// LinkList *list=(LinkList*)malloc(sizeof(LinkList));
// list->data=1;
// list->next=NULL;
// LinkList *s=list;
// for(int i=1;i<m;i++)
// {
// LinkList *p=(LinkList*)malloc(sizeof(LinkList));
// p->data=i+1;
// s->next=p;
// s=s->next;
// }
// s->next=list;
//
// int len=m;
// LinkList *q=list->next;
// LinkList *pre=list;
// int cnt=1;
// while(len>0)
// {
// while(cnt<n-1&&q!=NULL)
// {
// cnt++;
// q=q->next;
// pre=pre->next;
// }
// pre->next=q->next;
// cout<<q->data<<" ";
// q=pre->next;
// len--;
// cnt=0;
// }
//}
//
//
//
//
插入排序 每读入一个数,把它插入到应该在的位置 P141 18
//void insert(int a[],int n,int t)
//{
// int i=0;
// while(i<n)
// {
// if(a[i]>t)
// {
// break;
// }
// i++;
// }
// for(int j=n-1;j>=i;j--)
// {
// a[j+1]=a[j];
// }
// a[i]=t;
//}
//int main()
//{
// int n;
// int a[maxSize];
// cin>>n;
// int t;
// for(int i=0;i<n;i++)
// {
// cin>>t;
// insert(a,i,t);
// }
// for(int i=0;i<n;i++)
// cout<<a[i]<<" ";
//}
//
//