数据分类
数据分类

标题:数据分类 | 时间限制:1秒 | 内存限制:262144K | 语言限制:不限
对一个数据a进行分类,分类方法为:此数据a(四个字节大小)的四个字节相加对一个给定的值b取模,如果得到的结果小于一个给定的值c,则数据a为有效类型,其类型为取模的值;如果得到的结果大于或者等于c,则数据a为无效类型。
比如一个数据a=0x01010101,b=3,按照分类方法计算(0x01+0x01+0x01+0x01)%3=1,所以如果c=2,则此a为有效类型,其类型为1,如果c=1,则此a为无效类型;
又比如一个数据a=0x01010103,b=3,按照分类方法计算(0x01+0x01+0x01+0x03)%3=0,所以如果c=2,则此a为有效类型,其类型为0,如果c=0,则此a为无效类型。
输入12个数据,第一个数据为c,第二个数据为b,剩余10个数据为需要分类的数据,请找到有效类型中包含数据最多的类型,并输出该类型含有多少个数据。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int get_type(unsigned int a,unsigned int b);
void get_dp(int * p,unsigned int arr[])
{
int i = 0;
memset(p,0,sizeof(int)*arr[1]);
for(i=2;i<12;i++)
{
unsigned int type = 0;
type = get_type(arr[i],arr[1]);
if(type < arr[0])
{
p[type]++;
}
}
}
int get_max(unsigned int arr[],int * p)
{
int i = 0;
int max = -1;
for(i=0;i<(int)arr[1]+1;i++)
{
if(max < p[i])
{
max = p[i];
}
}
return max;
}
void read_data(unsigned int arr[])
{
int i = 0;
for(i=0;i<12;++i)
{
scanf("%u",&arr[i]);
}
}
int get_type(unsigned int a,unsigned int b)
{
int i = 0;
int sum = 0;
unsigned int mm = 255;
for(i=0;i<4;i++)
{
sum = sum + ((a & mm)>>(8*i));
mm *= 256;
}
return (sum % b);
}
int main()
{
unsigned int arr[12]={0};
int * p = NULL;
read_data(arr);
p = (int *)malloc(sizeof(int)*(arr[1]+1));
get_dp(p,arr);
printf("%d\n",get_max(arr,p));
free(p);
return 0;
}
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int c = sc.nextInt();
int b = sc.nextInt();
int[] numArr = new int [10];
for(int i = 0; i < 10; i++) {
numArr[i] = sc.nextInt();
}
if(0 == c) {
System.out.println(0);
return;
}
int[] resArr = new int [c];
int tmp = 0;
int max = 0;
for(int i = 0; i < 10; i++) {
tmp = (int) (numArr[i] / Math.pow(16, 6) + numArr[i] % Math.pow(16, 6) / Math.pow(16, 4)
+ numArr[i] % Math.pow(16, 4) / Math.pow(16, 2)
+ numArr[i] % Math.pow(16, 2));
tmp = tmp % b;
if(tmp < c) {
resArr[tmp]++;
}
}
for(int j = 0; j < c; j++) {
if(resArr[j] > max) {
max = resArr[j];
}
}
System.out.println(max);
}
}
查看14道真题和解析