1、字典序最小存入新数组
#include <stdio.h>
char s[] = "ACDBCB";
char t[] = " ";
int a = 0;
int b = 5;
int main(){
int left = 1; //如果是1,从左边取字符,否则从右边取字符
int j=0;
while(a <= b){
for (int i = 0; a + i <= b; i++){
if (s[a+i] < s[b-i]){
left = 1;
break;
}
else if (s[a+i] > s[b-i]){
left = 0;
break;
}
}
if (left == 1){
t[j]=s[a];
j++;
a++;
}else{
t[j]=s[b];
j++;
b--;
}
}
for(int k=0;k<6;k++){
printf("%c",t[k]);
}
return 0;
}
2、比较使用记忆数组前后的斐波那契数列的计算效率
(1)使用记忆数组
#include <stdio.h>
int mem[100];
int fib(int n){
if(n<=2){
return 1;
}
else{
int a,b;
if(mem[n-2]==0){
mem[n-2]=fib(n-2);
}
a=mem[n-2];
if(mem[n-1]==0){
mem[n-1]=fib(n-1);
}
b=mem[n-1];
return a+b;
}
}
int main(){
mem[100]={0};
int s;
s=fib(100);
printf("%d\n",s);
return 0;
}
(2)不使用记忆数组
int mem[100];
int fib(int n){
if(n<=2){
return 1;
}
else{
return fib(n-1)+fib(n-2);
}
}
int main(){
mem[100]={0};
int s;
s=fib(42);
printf("%d\n",s);
return 0;
}