Chinaunix首页 | 论坛 | 博客
  • 博客访问: 348006
  • 博文数量: 100
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 521
  • 用 户 组: 普通用户
  • 注册时间: 2014-10-31 11:37
个人简介

活到老,学到老

文章分类

全部博文(100)

文章存档

2018年(1)

2017年(2)

2016年(11)

2015年(82)

2014年(4)

我的朋友

分类: C/C++

2015-08-04 15:09:28


  1. //找数组中出现频率大于50的数
  2. char FindIt(char a[],int n)
  3. {
  4.   char ch;
  5.   int times=0;
  6.   int i;
  7. for(i=0;i<n;i++)
  8. {
  9.     if(times==0)/*计数清零,从本次开始选取新的字符*/
  10.     {
  11.         ch=a[i];
  12.         times=1;
  13.     }
  14.     else if(ch==a[i])/*找到相同的计数加1*/
  15.             times++;
  16.         else/*与备选的字符ch不同,计数-1.做一次抵消。只有次数最多的才会保留到最后*/
  17.             times--;
  18. }
  19. return ch;
  20. }

//列出数组中每个元素的出现次数,先排序完了再筛选
  1. typedef struct Tongji
  2. {
  3.     int data;
  4.     int cout;
  5. }tongji;

  6. void find(int *a,int len)
  7. {
  8.     tongji ae[10]={{0}};
  9.     tongji *pa=ae;
  10.     int i=0;
  11.     int j=0;

  12.     pa[0].data=a[0];
  13.     pa[0].cout=0;
  14.     for(i=0;i<len;i++)
  15.     {
  16.         if(pa[j].data==a[i])
  17.         {
  18.             pa[j].cout++;
  19.         }
  20.         else
  21.         {
  22.             j++;
  23.             pa[j].data=a[i];
  24.             pa[j].cout=1;
  25.         }
  26.     }
  27. }

  28. //char 转 int
  29. int CharToInt(char *a,int len)
  30. {
  31.     int temp=0;
  32.     int i=0;

  33.     for(i=0;i<len;i++)
  34.     {
  35.         if(a[i]<='9' && a[i]>='0')
  36.         {
  37.             temp*=10;
  38.             a[i]=a[i]-'0';
  39.             temp+=a[i];
  40.         }
  41.     }
  42.     return temp;
  43. }

  44. //十六进制转十进制
  45. long fun(char*s)
  46. {
  47.     int i,t;
  48.     long sum=0;
  49.     for(i=0;s[i];i++)
  50.     {
  51.         if(s[i]<='9')
  52.             t=s[i]-'0';
  53.         else 
  54.             t=s[i]-'a'+10;
  55.         sum=sum*16+t;
  56.     }
  57.     return sum;
  58. }

  59. //二分查找
  60. int binarySearch(int a[],int len,int val)
  61. {
  62.     int i,j;
  63.     int index=-1;
  64.     i=0;
  65.     j=len-1;

  66.     while(i<j)
  67.     {
  68.         index=i+(i+j)/2;
  69.         if(val==a[index])
  70.         {
  71.             return index;
  72.         }
  73.         else if(val>a[index])
  74.         {
  75.             j=index-1;
  76.         }
  77.         else
  78.         {
  79.             i=index+1;
  80.         }
  81.     }
  82.     return -1;
  83. }

  84. //比较一个字符串是否另一个字符串的
  85. int substr(const char* source,const char* sub)
  86. {
  87.     int sublen=strlen(sub);
  88.     int soulen=strlen(source);
  89.     int len=0;
  90.     int i=0;
  91.     int j=0;
  92.     if(sublen>=soulen)
  93.         return -1;

  94.     len=soulen-sublen;
  95.     for(i=0;i<=len;i++)
  96.     {
  97.         for(j=0;j<sublen;j++)
  98.         {
  99.             if(source[i+j]!=sub[j])
  100.                 break;
  101.         }
  102.     }
  103.     if(j==sublen)
  104.         return i;    
  105.     return -1;
  106. }

//合并两个有序数组
void MergeArray(int a[],int alen,int b[],int blen)
{
    int len=alen+blen-1;
    alen--;
    blen--;

    while(alen >=0 && blen >=0)
    {
        if(a[alen]<b[blen])
        {
            a[len--]=a[alen--];
        }
        else
        {
            a[len--]=b[blen--];
        }
    }
    while(alen>=0)
        a[len--]=a[alen--];
    while(blen>=0)
        b[len--]=b[blen--];
}

//获得一个int型的数中二进制中1的个数
int Find1Count(int num)
{
    if (num==0)
    {
        return 0;
    }
    int count=1;
    while (num= num & (num-1))
    {
        count++;
    }
    return count;
}

//输入一个数组,实现一个函数,让所有奇数都在偶数前面
void RecordOddEven(int A[],int len)
{
    int i=0,j=len-1;
    int temp=0;
    while (i<j)
    {
        while (i<len && A[i]%2==1) 
            i++; 

        while (j>=0 && A[j]%2==0) 
            j--;     

        if (i<j)
        {
            temp=a[i];
            a[i]=a[j];
            a[j]=temp;
        }
    }
}

//已知一个数组里面有正数也有负数,求相连子串和的的最大值
int MaxSum(int *a , int n)
{
    int tempstart = 0 , sum=0 , max = -1000;
    int i , start , end;
    start = end = 0;
    for(i = 0 ; i < n ; ++i)
    {
        if(sum < 0)
        {
            sum = a[i];
            tempstart = i;
        }
        else
            sum += a[i];

        if(sum > max)
        {
            max = sum;
            start = tempstart;
            end = i;
        }
    }
    return max;
}

阅读(906) | 评论(0) | 转发(0) |
0

上一篇:排序

下一篇:qmake和.pro

给主人留下些什么吧!~~