Programming-寻找发贴水王(C)
生活随笔
收集整理的這篇文章主要介紹了
Programming-寻找发贴水王(C)
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
分享一個大牛的人工智能教程。零基礎(chǔ)!通俗易懂!風(fēng)趣幽默!希望你也加入到人工智能的隊(duì)伍中來!請點(diǎn)擊http://www.captainbed.net
/** 在某一論壇,坊間風(fēng)聞有一“水王”發(fā)帖數(shù)目超過了帖子總數(shù)的一半。你能快速找出這個傳說中的水王嗎?** PostWaterKing.c - by Peace*/#include <stdio.h>typedef int Type;Type Find(Type* ID, int N) {Type candidate = -1;int i, nTimes;for (i = nTimes = 0; i < N; i++){if (nTimes == 0){candidate = ID[i];nTimes = 1;}else{if (ID[i] == candidate){nTimes++;}else{nTimes--;}}}return candidate; }/** 繼上次水王找到之后,論壇江湖又過了一段時間,現(xiàn)又涌現(xiàn)出三個發(fā)帖很多的ID,* 他們的發(fā)帖數(shù)目都超過了帖子總數(shù)目N的1/4。怎么從發(fā)貼的ID中快速找出他們的ID?*/ Type* Find3(Type* ID, int N) {Type candidate[3] = { -1, -1, -1 };int nTimes[3] = { 0, 0, 0 };int i;for (i = 0; i < N; i++){if (nTimes[0] == 0){candidate[0] = ID[i];nTimes[0] = 1;}else if (nTimes[1] == 0){candidate[1] = ID[i];nTimes[1] = 1;}else if (nTimes[2] == 0){candidate[2] = ID[i];nTimes[2] = 1;}else if (ID[i] == candidate[0]){nTimes[0]++;}else if (ID[i] == candidate[1]){nTimes[1]++;}else if (ID[i] == candidate[2]){nTimes[2]++;}else{nTimes[0]--;nTimes[1]--;nTimes[2]--;}}return candidate; }main() {Type A[16] = { 1, 6, 3, 6, 6, 2, 1, 6, 6, 3, 6, 6, 3, 6, 1, 6 };printf("The water king is: %d\n", Find(A, 16));Type A3[40] ={1,5,1,88,3,2,3,2,3,3,3,2,6,9,99,3,2,1,1,1,2,1,3,3,2,1,66,6,3,1,1,2,11,1,2,3,2,2,2,3};Type* K = Find3(A3, 40);printf("Afterwards, the big 3 water kings are: %d %d %d\n", K[0], K[1], K[2]);return 0; }// Output: /* The water king is: 6 Afterwards, the big 3 water kings are: 3 2 1 */總結(jié)
以上是生活随笔為你收集整理的Programming-寻找发贴水王(C)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 《陶哲轩实分析》阅读
- 下一篇: [学习报告]《LeetCode零基础指南