目录
前言
问题 A: 谁是你的潜在朋友
思路
总结
问题 B: 分组统计
思路
总结
前言
相关的课后题,其实都是水题。 所有的合集相关源码我都更新在gitee上了需要自取
xingleigao/study - Gitee.com
https://gitee.com/xingleigao/study/tree/master/codeup
问题 A: 谁是你的潜在朋友
谁是你的潜在朋友
http://codeup.hustoj.com/problem.php?cid=100000582&pid=0
思路
其实没特别多的思路,大家都看得懂。直接看代码把。
#include<cstdio> int main(){ int n, m,i; while(scanf("%d%d",&n,&m) != EOF && n != 0){ //判断是否输入结束 int hash[m + 1] = {0} ,user[n]; for(i = 0;i < n;i++){ scanf("%d",&user[i]); hash[user[i]] ++; //创建表 } for(i = 0;i < n;++i) hash[user[i]] > 1?printf("%d\n",hash[user[i]] - 1):printf("BeiJu\n");//查表输出 //hash[user[i]] > 1?printf("%d",hash[user[i]] - 1):printf("BeiJu"); } return 0; }
总结
可以了可以了。。
问题 B: 分组统计
分组统计
http://codeup.hustoj.com/problem.php?cid=100000582&pid=1
思路
这个题给我一种不清不楚的感觉,有个点要解释一下,其实是出现的所有元素都要打印,等于几就打印几。创建一个二维hash表就可以解决了。开到最大,看代码消化一下把。
#include<cstdio> #include<cstring> int main(){ int m,n; int hash[2000][2000] = {0}; //二维哈希 scanf("%d",&m); while(m--){ int a[2000],group[2000] = {0},max = 0,gmax = 0; memset(hash,0,sizeof(hash)); scanf("%d",&n); for(int i = 0;i < n;++i){ scanf("%d",&a[i]); //读入第一行数据 if(max < a[i]) max = a[i];//确定最大值用于输出格式 hash[0][a[i]]++; } int temp; for(int i = 0;i < n;i++){ scanf("%d",&temp); group[temp] ++; //组hash if(temp > gmax) gmax = temp;//确定最大值减小查找时间 hash[temp][a[i]] ++; //读入最大 } for(int i = 1;i <= gmax;++i){ if(group[i]){ //组hash命中 printf("%d={",i); for(int j = 1;j <= max;j++){ if(!hash[0][j]) continue;//数字hash不命中 printf("%d=%d",j,hash[i][j]); j != max?printf(","):printf("}\n"); } } } } return 0; }
总结
不是一道好题,很多数据靠猜,组和数字范围是0-2000完全没说。