zoukankan      html  css  js  c++  java
  • [算法]有趣算法合辑[31-40]

    题目31:八进制转换为十进制

    1.程序分析:           
    2.程序源码:

    main()
    { char *p,s[6];int n;
      p=s;
      gets(p);
      n=0;
      while(*(p)!='')
      {n=n*8+*p-'0';
      p++;}
      printf("%d",n);
    }

    题目32:求0—7所能组成的奇数个数。

    1.程序分析:
    2.程序源码:
    main()
    {
      long sum=4,s=4;
      int j;
      for(j=2;j<=8;j++)/*j is place of number*/
      { printf("
    %ld",sum);
      if(j<=2)
      s*=7;
      else
      s*=8;
      sum+=s;}
      printf("
    sum=%ld",sum);
    }

    题目33:一个偶数总能表示为两个素数之和。

    1.程序分析:
    2.程序源码:
    #include "stdio.h"
    #include "math.h"
    main()
    { int a,b,c,d;
      scanf("%d",&a);
      for(b=3;b<=a/2;b+=2)
      { for(c=2;c<=sqrt(b);c++)
      if(b%c==0) break;
      if(c>sqrt(b))
        d=a-b;
      else
        break;
      for(c=2;c<=sqrt(d);c++)
      if(d%c==0) break;
      if(c>sqrt(d))
        printf("%d=%d+%d
    ",a,b,d);
      }
    }

    题目34:推断一个素数能被几个9整除

    1.程序分析:
    2.程序源码:
    main()
    { long int m9=9,sum=9;
      int zi,n1=1,c9=1;
      scanf("%d",&zi);
      while(n1!=0)
      { if(!(zi/sum)) /*若整数a除以非零整数b。商为整数。且余数为零, 我们就说a能被b整除(或说b能整除a),记作b|a。注意b为0则不叫整除。*/
         n1=0;
        else
        {m9=m9*10;
         sum=sum+m9;
         c9++;
         }
       }
        printf("%ld,can be divided by %d "9"",sum,c9);
    }

    题目35:某个公司採用公用电话传递数据,数据是四位的整数。在传递过程中是加密的,加密规则例如以下:

       每位数字都加上5,然后用和除以10的余数取代该数字。再将第一位和第四位交换。第二位和第三位交换。
    1.程序分析:
    2.程序源码:
    main()
    {int a,i,aa[4],t;
      scanf("%d",&a);
      aa[0]=a%10;
      aa[1]=a%100/10;
      aa[2]=a%1000/100;
      aa[3]=a/1000;
      for(i=0;i<=3;i++)
      {aa[i]+=5;
       aa[i]%=10;
      }
      for(i=0;i<=3/2;i++)
      {t=aa[i];
       aa[i]=aa[3-i];
       aa[3-i]=t;
      }
      for(i=3;i>=0;i--)
        printf("%d",aa[i]);
    }


    题目36:海滩上有一堆桃子,五仅仅猴子来分。第一仅仅猴子把这堆桃子凭据分为五份。多了一个,这仅仅

       猴子把多的一个扔入海中,拿走了一份。第二仅仅猴子把剩下的桃子又平均分成五份,又多了
       一个,它相同把多的一个扔入海中,拿走了一份,第三、第四、第五仅仅猴子都是这样做的,
       问海滩上原来最少有多少个桃子?
    1.程序分析:
    2.程序源码:

    main()
    {
        int i,m,j,k,count;
        for(i=4;i<10000;i+=4)
        { 
          count=0;
          m=i;
          for(k=0;k<5;k++)
          {
           j=i/4*5+1;
           i=j;
           if(j%4==0)
            count++;
           else
            break;
          }
         i=m;
         if(count==4)
         {
           printf("%d
    ",count);
          break;
          }
        }
    }

    题目37:有n个人围成一圈。顺序排号。

    从第一个人開始报数(从1到3报数)。凡报到3的人退出圈子,问最后留下的是原来第几号的那位。

    1. 程序分析:
    2.程序源码:

    #define nmax 50
    main()
    {
      int i,k,m,n,num[nmax],*p;
      printf("please input the total of numbers:");
      scanf("%d",&n);
      p=num;
      for(i=0;i<n;i++)
       *(p+i)=i+1;
       i=0;
       k=0;
       m=0;
     while(m<n-1)
     {
       if(*(p+i)!=0) k++;
       if(k==3)
       { *(p+i)=0;
         k=0;
         m++;
       }
        i++;
        if(i==n) i=0;
      }
      while(*p==0) p++;
        printf("%d is left
    ",*p);
    }

    题目38:递归前n项积

    1. 程序分析:
    2.程序源码:

    int fac (int n)
    {
       if(n==1)
       return 1;
       return n*fac(n-1);
    }

    题目39:移除同样字符串

    1. 程序分析:
    2.程序源码:

            public static string RemoveExtraCharAndWithoutSort(string str)
            {
                if (string.IsNullOrEmpty(str))
                {
                    return null;
                }
                int[] tempArr = new int[256];
    
                string newStr = string.Empty;
                for (int i = 0; i < str.Length; i++)
                {
                    if (tempArr[str[i]] == 0)
                    {
                        tempArr[str[i]] = 1;
                        newStr += str[i];
                    }
                }
    
                return newStr;
            }

    题目40:倒数第m个节点

    1. 程序分析:相对于双向链表来说,单向链表仅仅能从头到尾依次訪问链表的各个节点,所以假设要找链表的倒数第m个元素也仅仅能
    从头到尾进行查找,在查找的过程中,设定两个指针。当中current指针指向当前訪问的节点。
     previous指针指向current之前的节点,且两者之间相距m个节点。这样,当current指针指向最后
    一个节点时。那previous指针指向的元素就是倒数第m个元素,程序的处理步骤例如以下:
    2.程序源码:

       element *CLinkList::FindMToLastElement(int m)
        {
             element *previous, *current;
             previous = current = head;
             // 訪问前m-1个节点
            for(int i = 0; i < m-1; ++i)
            {
               current = current->next;
              if(current == NULL)
              {
                 printf("number overstep
    ");
                 return NULL;
              }
           }
           //previous指针和current指针一起向尾移动
           while(current->next != NULL)
           {
              previous = previous->next;
              current = current->next;
           }
           //返回previous指针
           return previous;
        }


  • 相关阅读:
    html5 标签
    开发中常见问题
    This Android SDK requires Andriod Developer Toolkit version 23.0.0 or above
    onActivityResult 要加判断
    expandlistview child 不可点击
    自定义dialog布局
    mediaPlayer 播放
    转载 收藏 listview判断是否在底部
    mediaPlayer
    org.apache.http.legacy.jar 兼容
  • 原文地址:https://www.cnblogs.com/gcczhongduan/p/5216853.html
Copyright © 2011-2022 走看看