OpenJudge

约瑟夫问题,我用同样的方法,c++和java都过了,python超时了,为啥?

  • baobao
    baobao 18.2.12 回复

    这道题,不应该超时吧。。。。哪位大佬帮忙看看。。。我下面是ac的c++的代码
    Python代码:
    while True:
    lists = list()
    nm = input()
    n, m = int(nm.split(" ")[0]), int(nm.split(" ")[1])
    if n == 0 & m == 0:
    break
    for i in range(0, n):
    lists.append(i+1)
    t = 1
    i = 0
    if n == 0 and m == 0:
    break
    while True:
    if t == m:
    lists.remove(lists[i]) # 这里和java不同,是移除首个匹配项的
    t = 1
    if i == len(lists):
    i = 0
    continue
    if i != len(lists)-1:
    t += 1
    i += 1
    else:
    i = 0 # 下一个点应该就是i=0了。。。
    t += 1
    if len(lists) == 1:
    break
    print(lists[0])


    c++代码:
    #include<iostream>
    #include <vector>
    using namespace std;
    int main()
    {
    int i, n, m, t;

    vector<int> lists;

    while(true){
    cin>>n>>m;
    for(i=0;i<n;i++){
    lists.push_back(i+1);
    }
    t=1;
    i=0;
    if(n==0 && m==0) break;
    do{
    if(t == m){
    lists.erase(lists.begin()+i, lists.begin()+i+1);
    t=1;
    if(i==lists.size()){
    i=0;
    }
    continue;
    }
    if(i!=lists.size()-1){
    i++;
    t++;
    }
    else{
    i=0;
    t++;
    }
    }while(lists.size()!=1);
    cout<<lists[0]<<endl;
    lists.clear();
    }

    return 0;
    }

想要评论吗?

注册OpenJudge账号,如果您已经注册,请先登入