zoukankan      html  css  js  c++  java
  • 天王盖地虎

    1,求有序数列中某个元素的个数

    思想:二分找上下界:

    int element_count(int * set, int len, int e)
    {
        int f, a, b, t;
        for(a = 0, b = len - 1; a < b; set[t = a + b >> 1] <  e ? (a = t + 1) : (b = t - 1));
        for(f = a, b = len - 1; a < b; set[t = a + b >> 1] <= e ? (a = t + 1) : (b = t - 1));
        return b - f;
    }

    另一种实现:

    int element_count(int * set, int len, int e)
    {
        int t;
        if(set[0] == e && set[len - 1] == e) return len;
        if(set[0] > e || set[len - 1] < e) return 0;
        t = len / 2;
        return element_count(set, t, e) + element_count(set + t, len - t, e);
    }

    其他方法:

    int element_count(int * set, int len, int e)
    {
       int min=0,max=len-1,mid,count=0,k;
       while(min < max)
       {
           mid=(min+max)/2;
           if(set[mid]==e)
           {
                count = 1;
                
                for(k = mid ; k >= 0 && set[k]==e ; k --);
                count += (mid-k-1);
                
                for(k = mid ; k < len && set[k]==e ; k ++);
                count += (k-mid-1);   
        
                  break;
           }
           else if(set[mid]>e)
               max=mid-1;
           else 
               min = mid+1;
       }
       
    
    
      return count;
    }

    2,素数:

    #include<stdio.h>
    #include<math.h>
    
    
    int s(int k)
    {
        int i;
        int flag = 1;
       
        for(i=2;i< sqrt(k) && flag; i++)
        {
            if(0 == k%i)
                flag = 0;
        }
        if(flag)
            return 1;
        return 0;
    }
    
    void main()
    {
        int i,n;
       
        printf("please input a number here:
    ");
        scanf("%d",&n);
       
        if(n >=2)
            printf("%d
    ",2);
    
        for(i=3;i<=n; i+=2)
        {
            if(s(i))
                printf("%d
    ",i);
        }
    }

    判断函数也可以这样写:

    int s(int k)
    {
        int i;
       
        for(i=2; i<= sqrt(k) && k%i; i++);
    
        if(i > sqrt(k))
            return 1;
        return 0;
    }

     还可以写成:

    int s(int k)
    {
       int i;
       if(k < 2)
           return 0;
       if(k == 2)
           return 1;
       for(i = 3; i*i < k; i+=2)
           if(k%i == 0)
               return 0;
       return 1;        
        
    }

     还可以这样:

    int s(int k)
    {
       int i;
       if(k < 2)
           return 0;
       if(k == 2)
           return 1;
       for(i = 3; i*i<k && k%i; i+=2);
    
       if(i*i >= k)
            return 1;
       return 0;        
        
    }

    3,删除一个字符串中存在另一个字符串中的字符:

    #include <stdio.h>
    #include <string.h>
    
    squeeze(char* s1, const char* s2)
    {
        int i = 0,j = 0,k = 0;
        int flag = 0;
        char tm[100] = {0};
        int len1 = strlen(s1);
        int len2 = strlen(s2);
    
        for(i=0; i<len1; i++)
        {   
            flag = 1;
            for(j=0; j<len2 && flag; j++)
            {
                if(s1[i]==s2[j])
                {
                    flag = 0;
                }
            }
            if(flag)
                tm[k ++] = s1[i];
    
        }
    
        strcpy(s1,tm);
    
    }
    int main()
    {
        char a[100] = {0},b[100] = {0};
       
        printf("请输入s1:");
        scanf("%s",a);
    
        printf("请输入s2:");
        scanf("%s",b);
       
        squeeze(a,b);
       
        printf("删除后:%s
    ",a);
        return 0;
    }

    一次循环实现:

    squeeze(char* s1, const char* s2)
    {
        int i = 0,k = 0;
        int flag = 1;
    
        int len1 = strlen(s1);
        int len2 = strlen(s2);
    
        char tm[100] = {0};
        char sample[128] = {0};
    
        for(i = 0 ;i < len2 ; i ++)
            sample[s2[i]] = 1;    
    
        for(i = 0 ;i < len1 ;i ++)
        {
            flag = 1;
            if(sample[s1[i]])
                flag = 0;
            if(flag)
                tm[k ++] = s1[i];
        }
       
        tm[k] = 0;
    
        strcpy(s1,tm);
    
    }

    4,字符转换:

    #include<stdio.h>
    #include<string.h>
    
    void main()
    {
        char c[20];
        int i=0,len;
    
        printf("请输入字符串C:");
        scanf("%s",c);
        len  = strlen(c);
    
        for(;i<len&&(c[i]|=32);i++);
               
        puts(c);
           
    }

    或者:

    #include<stdio.h>
    #include<string.h>
    
    void main()
    {
        char c[20];
        int i=0;
    
        printf("请输入字符串C:");
        scanf("%s",c);
    
    
        for(;c[i]&&(c[i]|=32);i++);
               
        puts(c);
           
    }

    5,小问题

    #include  <stdio.h>
    #include "string.h" 
    
    int main()
    {
        char *str=NULL;
        int *p=NULL;
    //    int a;
    //    printf("%p  ",&a);   测试当前程序变量可用的地址
        str=(char*)0xFA65;
        printf("%p   ", str); 
    
        //  p=(int*)str;
        p=(int*)0x0012FF3C;
        printf("%p   ", p); 
    
        memcpy(p, "123", 3);
    //    *p = 12;
        printf("%d
    ", *p); 
    
    
        return 0;
    }

    6,数字根是指对一个整数,把它的各位数字相加,若其和为一位数,则此和即为其根,若不是一位数字,则把它的各位数字继续相加,直到其和为一个正整数为止。例如对于正整数24,因为2+,和为1位数,所以6即为其根。对于39,因为3+12,和不为个位数,继续相加,,3为个位数,则为数字的根。要求输入若干个正整数,以0为结束,输出每个正整数的根。

    unsigned foo( unsigned n )
    {
        while( n > 9 )
            n = n%10 + n/10;
        return n;
    }

    7,

    有一种落差是,你配不上自己的野心,也辜负了所受的苦难
  • 相关阅读:
    前端面试题整合(JS基础篇)(二)
    前端面试题整合(JS基础篇)(一)
    python学习笔记(六)— 模块
    python学习笔记(五)— 内置函数
    python学习笔记(四)— 补充
    python学习笔记(四)— 函数
    python学习笔记(二)— 集合
    python学习笔记(三)— 文件操作
    python学习笔记(二)— 字典(Dictionary)
    python学习笔记(二)— 元组(tuple)
  • 原文地址:https://www.cnblogs.com/lfsblack/p/3245900.html
Copyright © 2011-2022 走看看