码迷,mamicode.com
首页 > 其他好文 > 详细

几个小题

时间:2014-08-07 03:04:28      阅读:301      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   color   os   io   strong   for   

 

1、从一个数值连续的数组中,抽调n个元素,查找抽调的是哪几个

#include "stdafx.h"
#include <iostream>
using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
    int a[100] = {0};  //抽掉3, 4, 57
    int b[100] = {0};  //原始数组, [0, 99]

    for (int i = 0; i < sizeof(a) / sizeof(a[0]); ++ i)
    {
        if (i > 2 && i < 55) 
            a[i] = i + 2; 
        else if (i >= 55)  
            a[i] = i + 3; 
        else 
            a[i] = i;
 
        b[i] = i;
    }
 
    const int N = 3;

    int arr[N] = {0};
    int nIndex = 0;
    int k = 0;
    int j = 0;

    for ( k = 0,   j = 0; 
        k < (sizeof(a) / sizeof(a[0]) - N) && j < sizeof(b) / sizeof(b[0]); ++ j)
    {
        if (a[k] != b[j]) 
            arr[nIndex++] = b[j]; 
        else
            ++ k;

        if (sizeof(arr) / sizeof(arr[0]) == nIndex) 
            break; 
    }


    cout<<"\n打印被抽调的值\n";
    for (int i = 0; i < sizeof(arr) / sizeof(arr[0]); ++ i)
        cout << arr[i] <<endl;


    return 0;
}

 

 

 

运行结果

bubuko.com,布布扣

 

 

 

 

2、一个数组a[n + 1], 元素的值域为[1, n],找出任意一个重复的元素

#include "stdafx.h"
#include <iostream>
using namespace std;

/************************************************************************/
/* int型数组arr[n + 1], 数组元素的值域为[1, n]
求任意重复的数字

思路:
先快排, O(nlogn), 然后从头遍历,找到第一个a[i] == a[i +1]的即为第一个重复
的最小(大)值元素
/************************************************************************/

int Partition(int arr[], int low, int high)
{ 
    int i = low;
    int j = high;
    int priovt = arr[i];  

    while(i < j)
    { 
        //从右边找第一个小于privot的元素,将其放在low的位置
        while(i < j && arr[j] >= priovt)  --j;  
        if(i < j)
            arr[i] = arr[j];

        //从左边找第一个大于privot的元素,将其放在high的位置
        while(i < j && arr[i] <= priovt) ++ i;
        if(i < j)
            arr[j] = arr[i];  
    }

    arr[i] = priovt;

    return i; 
}


void QuickSort(int arr[], int low, int high)
{
    if(NULL == arr)
        return; 
    
    if (low < high)
    {
        //分成两部分
        int nPos = Partition(arr, low, high);  
        QuickSort(arr, low, nPos - 1);
        QuickSort(arr, nPos + 1, high);  
    } 
}

int _tmain(int argc, _TCHAR* argv[])
{
    //arr有6 + 1个元素, 值域为[1, 6]
    int arr[] = {3, 1, 2, 4, 5, 6, 3};
    int size = sizeof(arr) / sizeof(arr[0]);

    QuickSort(arr, 0, size - 1);

    cout << "\n打印排序之后的值\n";
    for (int i = 0; i < size; ++i)
    {
        cout << arr[i] << endl;
    }

    cout << "\n开始从头遍历,直到找到第一个重复的\n";
    for (int i = 0; i < size - 1; ++ i)
        if(arr[i] == arr[i + 1])
        {
            cout << "\n第一个重复的元素为: " << arr[i] << endl;
            break;
        }

    cout << endl << endl;

      
    return 0;
}

 

 

 

运行结果

bubuko.com,布布扣

 

 

3、表如下, 找出日期在2014年8月2日以后,操作次数超过(含)3次的用户

bubuko.com,布布扣

 

 select * from (
  select usr, count(usr) as times from tbl_users where dt>2014-08-02  group by usr ) t 
  where times >= 3
  

 

 

 

运行结果

bubuko.com,布布扣

 

 

 

 

几个小题,布布扣,bubuko.com

几个小题

标签:style   blog   http   color   os   io   strong   for   

原文地址:http://www.cnblogs.com/cuish/p/3896139.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!