1.设计思想:
如果每次删除四个不同的ID,那么,在剩下的ID列表中,原先发帖比例大于1/4的ID所占比例仍然大于1/4,可以通过不断重复这个过程,把ID列表中的ID总数降低(转化为更小的问题),从而得到问题的答案。
2.代码如下:
#include<iostream> using namespace std; void FindID(int ID[],int n,int rightID[]); int main() { int ID[16]={1,1,1,2,2,2,3,3,3,1,2,3,1,2,3,6}; int n=16; int rightID[3]; FindID(ID,n,rightID); cout << "符合条件的ID分别是:" << endl; for(int i=0;i<3;i++) cout << rightID[i] << " " << endl; return 0; } void FindID(int ID[],int n,int rightID[]) { int falseID=-1; int number[3]; number[0]=number[1]=number[2]=0; rightID[0]=rightID[1]=rightID[2]=falseID; for(int i=0;i<n;i++) { if(ID[i]==rightID[0]) { number[0]++; } else if(ID[i]==rightID[1]) { number[1]++; } else if(ID[i]==rightID[2]) { number[2]++; } else if(number[0]==0) { number[0]=1; rightID[0]=ID[i]; } else if(number[1]==0) { number[1]=1; rightID[1]=ID[i]; } else if(number[2]==0) { number[2]=1; rightID[2]=ID[i]; } else { number[0]--; number[1]--; number[2]--; } } }
3.结果截图:
4.个人总结:
此次和上次思路大致相同,但在有些细节上需要好好考虑,通过这一次的扩展,对题目有了进一步的认识。