1.统计出现的回文串个数
#include <stdio.h>
#include <stdlib.h>
int judge(char *str,int start,int end)
{
while(start<=end)
{
if(str[start]!=str[end])
{
return 0;
}
start++;
end--;
}
return 1;
}
int main() {
char s[100];
gets(s);
int i=0;
int count=0;
while(s[i]!='\0')
{
int j=i;
while(s[j]!='\0'){
if(judge(s,i,j))
count++;
j++;
}
i++;
}
printf("%d",count);
return 0;
}
2.翻牌
#include <stdio.h>
#include <stdlib.h>
void reverse(int visited[],int n,int index)
{
if(visited[n]==1)
return ;
for(int i=1;i<=n;i++)
if(i%index==0)
visited[i]==1;
reverse(visited,n,index+1);
}
void fun(int n)
{
int *visited=malloc(sizeof(int)*(n+1));
for(int i=1;i<=n;i++)
visited[i]=0;
reverse(visited,n,2);
int num=0;
for(int i=1;i<=n;i++)
if(visited[i]==0)
{
printf("%d为正面",i);
num++;
}
printf("%d",num);
}
int main()
{
fun(100);
}
3.判断对称二叉树
bool judge(LNode *p,LNode *q)
{
if(p==NULL&&q==NULL)
return true;
else if(p==NULL||q==NULL)
return false;
else if(p->val!=q->val)
return false;
else
return judge(p->left,q->right)&&judge(p->right,q->left);
}
入口:judge(root->left,root->right);
4.最大和连续子数组
void getMax(int a[],int n)
{
int pre=0,max=a[0];
int start=0,end=0,temps=0,len;
for(int i=0;i<n;i++)
{
if(pre+a[i]<a[i])
{
pre=a[i];
temps=i;
}
else{
pre=pre+a[i];
}
if(pre>max)
{
max=pre;
start=temps;
end=i;
}
}
len=end-start+1;
int res[len];
for(int i=0;i<len;i++)
res[i]=a[start+i];
}
5.卡布列卡猜想
#include <stdio.h>
#include <stdlib.h>
int ktoFour(int n)
{
while(n<1000)
{
n*=10;
}
return n;
}
int count(int n)
{
int a[4];
for(int i=0;i<4;i++)
{
a[i]=n%10;
n=n/10;
}
for(int i=0;i<4;i++)
for(int j=0;j<4-i-1;j++)
if(a[j]>a[j+1])
{
int temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
int max=a[3]*1000+a[2]*100+a[1]*10+a[0];
int min=a[0]*1000+a[1]*100+a[2]*10+a[3];
int dub=max-min;
if(dub<1000)
return ktoFour(dub);
else
return dub;
}
int main()
{
int n;
scanf("%d",&n);
int step=0;
while(n!=6174)
{
n=count(n);
printf("%d",n);
step++;
}
printf("step=%d",step);
}
6.二分法求区间中点
double eps=1e-4;
double func(double x)
{
return x*x*x-x*x-1;
}
double solution(double left,double right)
{
double mid;
while(right-left>eps)
{
mid=(left+right)/2;
if(func(mid)>0)
right=mid;
else
left=mid;
}
return mid;
}
越做感觉脑子越空,算了,老老实实看自己笔记本了
希望幸运女神借我后天大后天两天光明~~~~~~~~~~~~~~~