首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

算法题挑选幸运数字,该如何处理

2012-03-17 
算法题挑选幸运数字题目描述:现在比较盛行这样的一个抽奖游戏:每个人在1到1000中选一个数字写下来,然后拿

算法题挑选幸运数字
题目描述:
现在比较盛行这样的一个抽奖游戏:每个人在1到1000中选一个
数字写下来,然后拿出来比较,谁的数字既没有和其它人重复的,
并且是不重复里的最小的一个的话,那他这个就是Lucky Number。
谁手上得到这个Lucky Number,谁就会得到丰厚的奖品哦!

输入:
多组测试数据。第一行是n,下一行接着是n个人分别写下的
数字,其中1<=n<=10000,当输入的n为0的时候结束程序。

输出:
输出哪个人手上的数是Lucky Number,同时把这个数也输出。
如果没有Lucky Number,就输出"Thank you for playing"

样例输入:
5
1 3 1 7 5
7
1 2 3 1 2 4 3
0

样例输出:
2 3
6 4

提示:
对于:5
1 3 1 7 5
Lucky Number是3,在第二个位置(也就是第二个人手上),
所以输出:2 3
下一个同理,4是Lucky Number,第六个人手上,所以输出:
6 4

[解决办法]

C/C++ code
#include <stdio.h>#include <malloc.h>int main(){    int count, *num, *mark, i, min, minSub;    mark = (int*)malloc(sizeof(int)*1001);    while(scanf("%d", &count), count)    {        for(i = 1; i < 1001; ++i)            mark[i] = 0;        num = (int*)malloc(sizeof(int)*count);        for(i = 0; i < count; ++i)        {            scanf("%d", &num[i]);            ++mark[num[i]];        }        min = 1001;        minSub = 0;        for(i = 0; i < count; ++i)        {            if(mark[num[i]] == 1 && num[i] < min)            {                min = num[i];                minSub = i;            }        }        printf("%d %d\n", minSub+1, min);        free(num);    }    free(mark);    return 0;}
[解决办法]
C/C++ code
#include <vector> #include <algorithm> #include <functional> using namespace std;struct AssessTypeInfo{    int array;   //输入的幸运数字    int number;  //序号}; bool lessmark(const AssessTypeInfo& s1,const AssessTypeInfo& s2){    return s1.number < s2.number;} int main(){    vector<AssessTypeInfo > ctn;    int n = 0;    int temp = -1;    int i = 0;    bool bRet = false;    scanf("%d", &n);    while(n)    {        AssessTypeInfo a;        for(i=0; i<n; i++)        {            scanf("%d", &a.array);            a.number = i+1;            ctn.push_back(a);        }        sort(ctn.begin(), ctn.end(), lessmark);   //升序排序        i = 0;        temp = ctn[i].array;        for(i=1; i<n; i++)        {            if(temp != ctn[i].array)            {                if(bRet)                {                    temp = ctn[i].array;                    bRet = false;                    continue;                }                break;            }            bRet = true;        }        printf("%d %d\n",ctn[i].number,ctn[i].array);     }    return   0;}
[解决办法]
C/C++ code
#include <iostream>using namespace std;void getLuckyNumber(int arr[], int n, int *luckyPos, int *luckyNum){    int *temp = new int[1000];    memset(temp, 0, 1000 * sizeof(int));    for(int i = 0; i < n; ++i)    {        if(temp[arr[i]] == 0)            temp[arr[i]] = 1;        else            temp[arr[i]] = 2;    }        *luckyNum = 1001;        for(int i = 0; i < 1000; ++i)    {        if(temp[i] == 1)        {            if(i < *luckyNum)            {                *luckyNum = i;            }        }    }        if(*luckyNum == 0)    {        *luckyPos = -1;        return;    }        for(int i = 0; i < n; ++i)    {        if(*luckyNum == arr[i])        {            *luckyPos = i + 1;            break;        }    }}int main(){    int arr[] = {1, 2, 3, 1, 2, 4, 3};    int pos, num;    getLuckyNumber(arr, sizeof(arr) / sizeof(arr[0]), &pos, &num);    cout << pos << endl;    cout << num << endl;    return 0;} 

热点排行