数据分类
数据分类
标题:数据分类 | 时间限制: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); } }