11.23 作业

来源:互联网 发布:人工智能伏羲觉醒迅雷 编辑:程序博客网 时间:2024/05/19 19:15

1.题目:创建单链表并赋值,要求遍历能输出1~9

#include<stdio.h>#include<stdlib.h>#define malloc_error -1typedef int ElemType;typedef struct node{ElemType data;struct node *next;}Node;typedef Node *PNode;int Create_Head(PNode *head,ElemType data){    PNode p = (PNode)malloc(sizeof(Node)/sizeof(char));    if(p==NULL)    return malloc_error;    p->data=data;    p->next=*head;    *head=p;    }void DisPlay(PNode head){    if (head == NULL)    {        return;    }    PNode temp = head;    while (temp)    {        printf ("%4d", temp->data);        temp = temp->next;    }    printf ("\n");}int main(){    PNode head = NULL;    int i ;    for (i = 9; i > 0; i--)    {        Create_Head(&head, i);    }    DisPlay(head);    return 0;}

2.题目:读取一个5*5数组,然后显示每行的和与每列的和

#include <stdio.h>  int main()  {      int a[5][5] = {0};      int i;      int j;      for(i = 0; i < 5; i++)    {        for(j = 0; j < 5; j++)        {            scanf("%d", &a[i][j]);        }    }    printf("\n");     for (i = 0; i < 5; i++)      {                    for (j = 0; j < 5; j++)          {              printf ("%3d",a[i][j]);          }          printf ("\n");      }      printf ("\n");      for (i = 0; i < 5; i++)      {          int hangs = 0;          for (j = 0; j < 5; j++)          {              hangs = hangs + a[i][j];          }          printf ("第%d行的和为:%d\n",i+1,hangs);      }      printf ("\n");      for (i = 0; i < 5; i++)      {          int lies = 0;          for (j = 0; j < 5; j++)          {              lies = lies + a[j][i];          }          printf ("第%d列的和为:%d\n",i+1,lies);      }      return 0;  }  

3.题目:编程判断字符串是否为回文
判断一个字符串是否是回文,例如单词‘level’

#include <stdio.h>  #include <string.h>  #define YES 1  #define NO  0  int judge(char* str)  {      if(str == NULL)      {          return NO;      }      int len = strlen(str);      char* p = str;      char* q = str;      while(*p++);      p -= 2;      for(; str != '\0', p != q; str++, p--)      {          if(*str != *p)          {              return NO;          }      }      return YES;  }  int main()  {      char str1[] = "12321";      char str2[] = "12345";      if(judge(str1))      {          printf("12321是回文\n");      }      else      {          printf("12321不是回文\n");      }      if(judge(str2))      {          printf("12345是回文\n");      }      else      {          printf("12345不是回文\n");      }      return 0;  }  

4.题目:生日蜡烛
某君从某年开始每年都举办一次生日party,并且每次都要吹熄与年龄相同根数的蜡烛。
现在算起来,他一共吹熄了236根蜡烛。
请问,他从多少岁开始过生日party的? (第七届蓝桥杯B组真题(第二题))

/*  i + (i + 1) + (i + 2) +...+(i + n) =236     (n + 1)*i +n*(n+1)/2 =236     2*(n+1)*i + n*(n+1) =472     (2*i+n)*(n+1) = 472  */  #include<stdio.h>  int main()  {      int i;      int n;      int sum = 236;      for (i = 0; i < 100; i++)      {          for (n = 0; n < 100; n++)          {              if ((n + 1) * (2 * i + n) == 472)              {                  printf("%d\n",i);              }          }      }      return 0;  }  

5.题目:编程实现查找两个字符串的最大公共子串
示例:”aocdfe”和”pmcdfa”最大公共子串为”cfd”

#include <stdio.h>  #include <string.h>  #include <stdlib.h>  #define GREATER 1  #define EQUAL   0  #define LESS   -1  char* my_strstr(char* str1, char* str2)    {        const char* bp;        const char* sp;        if(str1 == NULL || str2 == NULL)        {            return str1;        }        while(*str1)        {            bp = str1;                      //用于str1的遍历            sp = str2;                      //用于str2的遍历            while(*bp++ == *sp++)           //遍历str2字符串            {                if(*sp == '\0')             //找到了str2字符串结束符退出                {                    return str1;                }            }            str1++;        }        return NULL;  }    char* mycomstring(char* str1, char* str2)  {      if(str1 == NULL || str2 == NULL)        {            return str1;        }        char* shortstr;      char* longstr;      char* substr;      int i, j;      if(strlen(str1) <= strlen(str2))      {          shortstr = str1;          longstr = str2;      }      else      {          shortstr = str2;          longstr = str1;      }      if(my_strstr(longstr, shortstr) != NULL)      {          return shortstr;      }      substr = (char*)malloc(sizeof(char)*(strlen(shortstr) + 1));      for(i = strlen(shortstr)-1; i>0; i--)      {          for(j = 0; j <= strlen(shortstr)-i; j++)          {              memcpy(substr, &shortstr[j], i);              substr[i] = '\0';              if(my_strstr(longstr, substr) != NULL)              {                  return substr;              }          }      }      return NULL;  }  int main()  {      char str1[] = "aocdfe";      char str2[] = "pmcdfa";      printf("%s\n", mycomstring(str1, str2));      return 0;  }  

补充:
编程实现字符串中子串的查找
请写一个函数,实现从一个字符串中,查找另一个字符串的位置,如strstr(”12345”, “34”)返回值为2,即在2号位置找到字符串“34”

#include <stdio.h>  const char* my_strstr(const char* str1, const char* str2)  {      const char* bp;      const char* sp;      if(str1 == NULL || str2 == NULL)      {          return str1;      }      while(*str1)      {          bp = str1;              //用于str1的遍历          sp = str2;              //用于str2的遍历          while(*bp++ == *sp++)           //遍历str2字符串          {              if(*sp == '\0')         //找到了str2字符串结束符退出              {                  return str1;              }          }          str1++;      }  }  int main()  {      char p[] = "12345";      char q[] = "34";      char* r = my_strstr(p, q);      printf("r:%s\n", r);      return 0;  }