回文判断
先按要求输入字符串,再从开头和结尾向中间判断,如果出现不相等情况则输出No,如果全都相等则是回文数,输出Yes。
源代码:
#include <iostream>
using namespace std;
void Huiwen(int n,char str[],int m);
int main(){
int i=0;
char str[100];
cin>>str;
while(str[i]!='\0')
i++;
Huiwen(0,str,i-1);
return 0;
}
void Huiwen(int n,char str[],int m){
if(str[n]!=str[m]){
cout<<"No"<<endl;
return ;
}
else{
if(n<m)
Huiwen(n+1,str,m-1);
else
cout<<"Yes"<<endl;
}
}
数的因子之和
用递归求 输入的数的因子之和,从比他小的数到1,再和原来的数比较大小,判断是否相等。
源代码:
#include <iostream>
using namespace std;
int Sum(int n,int i);
int main(){
int n;
int x;
cin>>n;
x=Sum(n,n-1);
if(n==x)
cout<<"Yes"<<endl;
else
cout<<"No"<<endl;
return 0;
}
int Sum(int n,int i){
if(i>0){
if(n%i==0)
return Sum(n,i-1)+i;
else
return Sum(n,i-1);
}
else
return 0;
}
集合的幂集
输入集合所含元素和个数,要按顺序输出给定集合的幂集,类似二叉树的形式,将一个函数递归成两个,两个再分别递归求解。
源代码:
#include <iostream>
#include <cstring>
using namespace std;
void Func(int i,char *Temp,int n);
char str[21];
int main()
{
int n;
char Temp[21]={0};
cin>>n>>str;
Func(0,Temp,n);
return 0;
}
void Func(int i,char *Temp,int n)
{
char reTemp[21];
strcpy(reTemp,Temp);
if(i==n)
{
cout<<"("<<Temp<<")";
return ;
}
else
{
Func(i+1,reTemp,n);
strncat(reTemp,(str+i),1);
Func(i+1,reTemp,n);
}
}
多项式计算
算法描述:
要求多项式的和,已经给定了系数和次方数,只要从最后一项开始乘以x就行,从最后一项往前面循环,用sum表示总结果用sum1表示现在的次方数。注意:要开一个大一点的数组,而且不能用递归和双重循环,以免超时。
源程序:
#include <iostream>
using namespace std;
int main(){
int i;
int n,x;
int a[100001];//开一个大一点的数组
int sum=0,sum1=1;
cin>>n>>x;
for(i=0;i<=n;i++){//存各项系数
cin>>a[i];
}
for(i=n;i>=0;i--){//从最后循环,求出多项式的解
sum+=a[i]*sum1;
sum1=sum1*x;
}
cout<<sum<<endl;
return 0;
}
栈的问题
算法描述:
用递归不断的进栈出栈,直到所有的元素都进栈。有要进栈的元素,先进栈,再递归,直到所有的都进栈。待进栈栈中有要出栈的让他们出栈,把这些存入最后要输出的数组中,等到所有都出栈后输出。
源程序:
#include <iostream>
using namespace std;
int s[15];
int ss=0;
int a[15];
int length=0;
void push(int x){//进栈操作
a[length++]=x;
}
int pop(){
return a[--length];//出栈操作
}
void stack(int N[],int i,int in,int out){
if(in==0&&out==0){//如果要进栈和要出栈的都没有输出栈内元素
for(int j=0;j<i;j++){
cout<<s[j];
}
cout<<endl;
}
else{
if(in>0){//如果有要进栈的,进栈
push(N[i]);
stack(N,i+1,in-1,out);
pop();
}
if(out>0&&out>in){//如果有要出栈的出栈
s[ss++]=pop();
stack(N,i,in,out-1);
push(s[--ss]);
}
}
}
int main(){
int n,i;
cin>>n;
int N[15];
for(i=0;i<n;i++){//把1~n存到数组中,以便进出栈
N[i]=i+1;
}
stack(N,0,n,n);
return 0;
}