算法题

1.

 

 

int countSegments(char * s){
    int i,sum,flag;
    i=sum=flag=0;
    for(i=0;s[i]!='\0';i++){
        if(s[i]==' ')flag=0;
        else if(flag==0){
            sum++;
            flag=1;
        }
    }
    return sum;
}

特别注意这里对于字符的判断应该为单引号'\0'

2.

 

 

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */


struct ListNode* deleteDuplicates(struct ListNode* head){
struct ListNode* p=head;
while(p!=NULL&&p->next!=NULL){//需要也判断p,这样才能保证p->next不为野指针
    if(p->val==p->next->val){
        p->next=p->next->next;
    }
    else
    {
        p=p->next;
    }
}
return head;
}

 3.

 

 

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     struct TreeNode *left;
 *     struct TreeNode *right;
 * };
 */


int maxDepth(struct TreeNode* root){
 
while(root!=NULL){
  int left=maxDepth(root->left);
  int right=maxDepth(root->right);
  return left>right?left+1:right+1;
}
return 0;
}

 4.

 

 

int reverse(int x){
long count=0;
while(x!=0){
    count=count*10+x%10;
    
    x=x/10;
}
if(count>2147483647||count<-2147483648)
return 0;
else
return count;

}

 5.水仙花数

#include <stdio.h>
#define MAXS 30
#include<string.h>

int main()
{
    int n;
    int x=0;
    int  y=0;
    int z=0;
    scanf("%d",&n);
    if(n<100||n>999){
        printf("ERROE");
    }
    else{
    int tmp=n;
    x=n%10;
    n=n/10;
    y=n%10;
    n=n/10;
    z=n%10;
    if(tmp==(int)(pow(x,3)+pow(y,3)+pow(z,3))){
        printf("YES");
    }
    else{
        printf("NO");
    }
    }
        

    return 0;
}

 6.杨辉三角

#include <stdio.h>
#include <stdlib.h>
/*
1
1 1
1 2 1
1 3 3 1

*/
int main()
{
  int a[10][10];
  int i=0;
  int j=0;
  //第一列和对角线 
  for(i=0;i<10;i++){
      a[i][i]=1;
      a[i][0]=1;
  }
  //中间部分(从第三行开始 i=2) 
  for(i=2;i<10;i++){
      for(j=1;j<i;j++){
      a[i][j]=a[i-1][j]+a[i-1][j-1]; 
      }
      
  }
  //打印 
   for(i=0;i<10;i++){
      for(j=0;j<=i;j++){
      printf("%d ",a[i][j]); 
      }
      printf("\n");
      
  }
}

 7.树的遍历:前中后,知二求一

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
 
typedef struct node
{
    char data;
    struct node *l,*r;
} tree;
tree * creat()
{
    tree *t;
    t=(tree *)malloc(sizeof(tree));
    t->l=NULL;
    t->r=NULL;
    return t;
}
tree *creatree(int n, char *a, char *b)
{
    int i;
    if(n==0)
        return NULL;
    tree *t;
    t=creat();
    t->data=a[0];
    for(i=0; i<n; i++)
    {
        if(a[0]==b[i])
            break;
    }
    printf("i=%d a+1=%c ,b=%c ",i,*(a+1),*b);
    printf("n-1-i=%d a+1+i=%c ,b+1+i=%c\n",n-1-i,*(a+1+i),*(b+1+i));
    t->l=creatree(i,a+1,b);
    t->r=creatree(n-1-i,a+1+i,b+1+i);
    return t;
}
void back_show(tree *t)
{
    if(t)
    {
        back_show(t->l);
        back_show(t->r);
        printf("%c",t->data);
    }
}
int main()
{
    tree *t;
    int n;
    char a[55],b[55];
    scanf("%s %s",a,b);
    n=strlen(a);
    t=creatree(n,a,b);
    back_show(t);
    printf("\n");
    return 0;
}

 汉诺塔:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
 
void hanio(int n,char a,char b,char c){
    if(n==1){
        printf("%c->%c\n",a,c);
    }
    else{
        hanio(n-1,a,c,b);
        printf("%c->%c\n",a,c);    
        hanio(n-1,b,a,c);
    }
}


void main(){
    hanio(3,'A','B','C');
    
} 

 

posted @ 2020-04-21 10:14  记得喝牛奶  阅读(146)  评论(0编辑  收藏  举报