2 条题解

  • 0
    @ 2023-11-29 20:01:10
    #include<stdio.h>
    int a[1000];
    int main() {
        int n,x1; scanf("%d%d",&n,&x1);
        a[x1]++;
        int i,max=a[x1],k=x1,xi;
        for(i=2;i<=n;i++) {
            xi=(x1*37+33031)%n+1;
            a[xi]++;
            if(a[xi]>max || (a[xi]==max && xi<k)) {
                max=a[xi]; k=xi;
            }
            x1=xi;
        }
        printf("%d\n",k);
        return 0;
    }
    
    • 0
      @ 2023-11-29 12:36:37
      #include <stdio.h>
      #include <stdlib.h>
      #include<cstring>
      #define N 1001//此数组包含1001个整形数组 
      int x[N], f[N];
      int main() {
      	memset(x, 0, sizeof(x));
      	memset(f, 0, sizeof(f));//使用memset函数将数组初始化
      	int i, max, ans;//循环计数,记录最大频率,答案
      	int n, x1;
      	scanf("%d%d", &n, &x1);
      	x[1] = x1;
      
      	for (i = 2; i <= n; i++) {
      		x[i] = ((x[i - 1] * 37 + 33031) % n) + 1;
      	}
      
      	for (i = 1; i <= n; i++) { //计算数组f中每个元素频率
      		f[x[i]]++;//对数组f中与数组x中当前元素相等的元素进行计数
      	}
      
      	max = -1;
      	ans = -1;//初始化
      
      	for (i = 1; i <= n; i++) { //查找数组f中最大频率及对应元素
      		if (f[i] > max) {
      			max = f[i];
      			ans = i;//若成立,更新
      		}
      	}
      
      	printf("%d\n",ans);
      
      	return 0;
      }
      
      • 1

      信息

      ID
      110
      时间
      1000ms
      内存
      128MiB
      难度
      6
      标签
      递交数
      161
      已通过
      49
      上传者