10 条题解

  • 5
    @ 2024-9-2 15:17:40

    何书帆月吗

  • 2
    @ 2024-9-18 10:49:49
    b=input().split()
    n=int(b[0])
    m=int(b[1])
    a=[]
    k=-1
    for i in range(1,n+1):
        a.append(i)
    while len(a)!=1:
        k+=m
        k=k%len(a)
        print(a[k],end=' ')
        a.pop(k)
        k-=1
        
    print(end='\n')
    print(a[0])
    

    最短好吧

    • 2
      @ 2024-9-16 16:53:06

      单向链表(循环链表,即尾节点指针指向头结点)

      class Node:
          def __init__(self,val:int,nxt:int):
              self.val=val
              self.nxt=nxt
      def add (it,val):
          a.append(Node(val,a[it].nxt))
          a[it].nxt=len(a)-1
      def delete (it):
          a[it].nxt=a[a[it].nxt].nxt
      n,m=map(int,input().split())
      a=[Node(i+1,i+1) for i in range(n)]
      a[n-1].nxt=0
      it=0
      f=1
      while n>1:
          n-=1
          for i in range(m-1-f):
              it=a[it].nxt
          print(a[a[it].nxt].val,end=" ")
          delete(it)
          f=0
      print()
      it=a[it].nxt
      print(a[it].val)
      
      • 2
        @ 2024-9-15 21:30:43
        n,m=map(int,input().split())
        cnt=0
        h=0
        t=n
        a=[i for i in range(1,n+1)]
        cnt=0
        while h<t-1:
            for i in range(m-1):
                a.append(a[h])
                h+=1
                t+=1
            print(a[h],end=" ")
            h+=1
        print()
        print(a[h])
        

        python队列 h:队头(head) t:队尾(tail)

        • 2
          @ 2024-9-7 12:44:35

          python

          N=1e5+10
          a=[0]*110000
          p=input().split()
          n=int(p[0])
          m=int(p[1])
          c=0
          k=0
          now=0
          while(c!=(n-1)):
              now=(now+1)%n
              while(a[now]!=0):
                  now=(now+1)%n
              k+=1;
              #print(k,end=" ")
              if(k==m):
                  if(now==0):
                      print(n,end=" ")
                  else:
                      print(now,end=" ")
                  a[now]=1
                  k=0
                  c+=1
          print()
          ans=-1
          for i in range(n):
              if(a[i]==0):
                  ans=i
                  break
          if(ans==0):
              ans=n
          print(ans)
          
          • 2
            @ 2022-10-31 17:20:33

            C语言单向循环链表写法

            #include <stdlib.h>
            #include <stdio.h>
            
            typedef struct _List {
            	int num;
            	struct _List *ne;
            } List; //节点结构体
            
            int n, m;
            List *head, *tail; //头指针、尾指针
            
            void init(int x) {
            	List *temp = (List *)malloc(sizeof(List));
            	temp -> num = x;
            	temp -> ne = NULL;
            	head = tail = temp;
            } //初始化链表(第一个节点)
            
            void insert_to_tail(int x) {
            	List *temp = (List *)malloc(sizeof(List));
            	temp -> num = x;
            	temp -> ne = NULL;
            	tail -> ne = temp;
            	tail = temp;
            } //将节点插入到尾部
            
            int main()
            {
            	scanf("%d%d", &n, &m);
            	for(int i = 1; i <= n; i++) {
            		if(i == 1) init(i);
            		else insert_to_tail(i);
            	} //建立链表
            	tail -> ne = head; //首尾相连(循环链表)
            	int rec = 0;
            	for(List *temp = head, *pr = NULL; temp != temp -> ne;) { //遍历循环链表
            		if(++rec % m == 0) { //踢人
            			printf("%d ", temp -> num);
            			pr -> ne = temp -> ne;
            			free(temp);
            			head = temp = pr -> ne;
            		}
            		else {
            			pr = temp;
            			head = temp = temp -> ne;	
            		}
            	}
            	printf("\n%d\n", head -> num);
            	return 0;	
            }
            
            • 2
              @ 2022-7-17 19:21:05
              using namespace std;
              int n[10000];
              int main(){
              	int a,b;
              	cin>>a>>b;
              	for(int i=1;i<=a;i++){
              		n[i]=i;
              	}
              	int geshu=0; 
              	int k=0;
              	for(int i=1;geshu!=a-1;){
              		if(i==a+1){
              			i=1;
              		} 
              		if(n[i]!=0)k++;
              		if(k==b){
              			cout<<n[i]<<" "; 
              			n[i]=0;
              			geshu++;
              			k=0;
              		}
              		i++;
              		
              	}
              	cout<<endl;
              	for(int i=1;i<=a;i++){
              		if(n[i]!=0){
              			cout<<n[i];
              			break;
              		}
              	}
              	return 0;
              }
              
              • 2
                @ 2022-7-12 10:30:59
                #include<bits/stdc++.h>
                using namespace std;
                int main()
                {
                	int a[10001];
                	int n,m;
                	cin>>n>>m;
                	for(int i=1;i<=n;++i)a[i]=false;
                	int f=0,t=0,s=0;
                	do{
                		++t;
                		if(t==n+1)t=1;
                		if(a[t]==false)++s;
                		if(s==m)
                		{
                			s=0;
                			cout<<t<<" ";
                			a[t]=true;
                			++f;
                		}
                	}while(f!=n-1);
                	for(int i=1;i<=n;++i)
                	{
                		if(a[i]==false)cout<<endl<<i;
                	}
                }
                
                • 1
                  @ 2022-12-21 10:31:56

                  我特别喜欢某人说过的一句话:所有的约瑟夫问题都可以用队列或者线段树来解决,且思路简单于一般的数组模拟

                  #include <bits/stdc++.h>
                  using namespace std;
                  
                  queue<int> q;
                  vector<int> ans;
                  
                  int main()
                  {
                  	int n,m;
                  	cin >> n >> m;
                  	for(int i=1;i<=n;i++) q.push(i);
                  	int i=1;
                  	while(q.size()>1)
                  	{
                  		if(i == m)
                  		{
                  			int t = q.front();
                  			q.pop();
                  			ans.push_back(t);
                  			i = 1;
                  		}
                  		else
                  		{
                  			int t = q.front();
                  			q.pop();
                  			q.push(t);
                  			i++;
                  		}
                  	}
                  	for(auto x:ans) cout << x << " "; 
                  	cout << endl << q.front();
                  	return 0;
                  }
                  
                  • -20
                    @ 2021-5-24 13:43:01

                    C++ :

                    #include <cstdio>
                    int main()
                    {
                        printf("4");
                        return 0;
                    }
                    
                  • 1

                  信息

                  ID
                  105
                  时间
                  1000ms
                  内存
                  128MiB
                  难度
                  7
                  标签
                  递交数
                  1460
                  已通过
                  288
                  上传者