1 条题解

  • 0
    @ 2025-2-14 20:50:07

    C++ :

    #include<bits/stdc++.h>
    using namespace std;
    int main()
    {
    	
    	int n,m,a[1005];
    	cin>>n>>m;
    	int ans=0,sum=0;
    	for(int i=1;i<=n;i++)
    		a[i]=i;
    	for(int i=1;   ;i++)
    	{
    		for(int j=1;j<=n;j++)
    		{
    			if(a[j]!=0)
    			{
    				ans++;
    				if(ans==m)
    				{
    				a[j]=0;sum++;
    				ans=0;
    				}
    			}
    			if(sum==(n-1))
    			{
    				for(int k=1;k<=n;k++)
    				{
    					if(a[k]!=0)
    					{cout<<k; return 0;}
    				}
    			
    			}
    	
    			
    		}
    	}
    	
    	
    	
    	
    	return 0;
    }
    

    Pascal :

    var
      n,m,i,s,k,t:longint;
      a:array[1..10000] of integer;
    begin
      readln(n,m);
      for i:=1 to n do a[i]:=1;
      while s<n-1 do
        begin
          repeat
            inc(k);
            if a[k]=1 then inc(t);
            if k>n then k:=0;
          until t=m;
          a[k]:=0; t:=0;
          inc(s);
        end;
      for i:=1 to n do
        if a[i]=1 then writeln(i);
    end.
    

    Java :

    import java.util.Scanner;
    public class Main {
        public static void main(String[] args) {
              Scanner s = new Scanner(System.in);
              int n = s.nextInt();
              int m=s.nextInt();
              boolean[] arr = new boolean[n];
              for(int i=0; i<arr.length; i++) {
               arr[i] = true;//下标为TRUE时说明还在圈里
              }
              int leftCount = n;
              int countNum = 0;
              int index = 0;
              while(leftCount > 1) {
               if(arr[index] == true) {//当在圈里时
                countNum ++; //报数递加
                if(countNum == m) {//报道3时
                 countNum =0;//从零开始继续报数
                 arr[index] = false;//此人退出圈子
                 leftCount --;//剩余人数减一
                }
               }
               index ++;//每报一次数,下标加一
               if(index == n) {//是循环数数,当下标大于n时,说明已经数了一圈,
                index = 0;//将下标设为零重新开始。
               }
              }
              for(int i=0; i<n; i++) {
               if(arr[i] == true) {
                System.out.println(i+1);
               }
              }
         }
    }
    
    • 1

    信息

    ID
    390
    时间
    1000ms
    内存
    128MiB
    难度
    10
    标签
    递交数
    1
    已通过
    1
    上传者