int prime(int n) { int q; for (int i = 2; i <=sqrt(n) ; ++i) { if(n % i == 0) return 0; } return 1; }(如果追求时间复杂度可以用改进式写法)
牌的数量是字符串长度的一半(进行循环),循环内判断剩余牌数量是否为素数,倘若为素数就扔上面的牌,一次扔两个字符(憨式解法),不为素数就扔底部两个字符(憨式解法)
string Orderofpoker(string x) { int n; int b = x.size(); int count1 = 0,count2 = 0,count = b/2; string s; for (int i = 0; i < b/2; ++i) { if(prime(count) == 1) { s+=x[count1]; count1++; s+=x[count1]; count1++; } else { s+=x[b - 1 - count2 - 1]; count2++; s+=x[b - 1 - count2 + 1]; count2++; } count--; } return s; }
全部评论
(2) 回帖