蒟蒻某些错题,是不是很菜~
题目一 点赞 (20 分)
微博上有个“点赞”功能,你可以为你喜欢的博文点个赞表示支持。每篇博文都有一些刻画其特性的标签,而你点赞的博文的类型,也间接刻画了你的特性。本题就要求你写个程序,通过统计一个人点赞的纪录,分析这个人的特性。
输入格式:
输入在第一行给出一个正整数N(≤1000),是该用户点赞的博文数量。随后N行,每行给出一篇被其点赞的博文的特性描述,格式为“K F1⋯FK”,其中1≤K≤10,Fi(i=1,⋯,K)是特性标签的编号,我们将所有特性标签从1到1000编号。数字间以空格分隔。
输出格式:
统计所有被点赞的博文中最常出现的那个特性标签,在一行中输出它的编号和出现次数,数字间隔1个空格。如果有并列,则输出编号最大的那个。
输入样例:
4
3 889 233 2
5 100 3 233 2 73
4 3 73 889 2
2 233 123
输出样例:
233 3
#include<iostream>
#include<stdio.h>
#include<algorithm>
using namespace std;
struct Node{
int cnt,num;
}Node[1001];
int cmp(struct Node A,struct Node B){
if(A.cnt!=B.cnt) //struct的比较
return A.cnt>B.cnt;
else return A.num>B.num;
}
int main(void){
int n,k,a;
cin>>n;
while(n--){
cin>>k;
while(k--){
cin>>a;
Node[a].cnt++;
Node[a].num=a;
}
}
sort(Node+1,Node+1001,cmp);
printf("%d %d\n",Node[1].num,Node[1].cnt);
return 0;
}
题目二 7-13 非常弹的球 (30 分)
刚上高一的森森为了学好物理,买了一个“非常弹”的球。虽然说是非常弹的球,其实也就是一般的弹力球而已。森森玩了一会儿弹力球后突然想到,假如他在地上用力弹球,球最远能弹到多远去呢?他不太会,你能帮他解决吗?当然为了刚学习物理的森森,我们对环境做一些简化:
假设森森是一个质点,以森森为原点设立坐标轴,则森森位于(0, 0)点。
小球质量为w/100 千克(kg),重力加速度为9.8米/秒平方(m/s2)。
森森在地上用力弹球的过程可简化为球从(0, 0)点以某个森森选择的角度ang (0<ang<π/2) 向第一象限抛出,抛出时假设动能为1000 焦耳(J)。
小球在空中仅受重力作用,球纵坐标为0时可视作落地,落地时损失p%动能并反弹。
地面可视为刚体,忽略小球形状、空气阻力及摩擦阻力等。
森森为你准备的公式:
动能公式:E=m×v2/2
牛顿力学公式:F=m×a
重力:G=m×g
其中:
E - 动能,单位为“焦耳”
m - 质量,单位为“千克”
v - 速度,单位为“米/秒”
a - 加速度,单位为“米/秒平方”
g - 重力加速度
输入格式:
输入在一行中给出两个整数:1≤w≤1000 和 1≤p≤100,分别表示放大100倍的小球质量、以及损失动力的百分比p。
输出格式:
在一行输出最远的投掷距离,保留3位小数。
输入样例:
100 90
输出样例:
226.757
45°时运动位置最远,根据x=Vxt=Vcos45°t=Vcos45°Vy/9.8=Vcos45°Vsin45°/9.8
因为E=mv2/2;x=v/g,v2=200000/w;代码只需带入公式即可
#include<iostream>
#include<stdio.h>
#include<algorithm>
using namespace std;
int main(void){
int w,p;
double v,x=0;
while(scanf("%d%d",&w,&p)==2){
v=200000.0/w;
while(v>0){
x+=v/9.8;
v*=(100-p)*1.0/100;
}
printf("%.3lf",x);
}
return 0;
}
题目三7-6 连续因子 (20 分)
一个正整数 N 的因子中可能存在若干连续的数字。例如 630 可以分解为 3×5×6×7,其中 5、6、7 就是 3 个连续的数字。给定任一正整数 N,要求编写程序求出最长连续因子的个数,并输出最小的连续因子序列。
输入格式:
输入在一行中给出一个正整数 N(1<N<231)。
输出格式:
首先在第 1 行输出最长连续因子的个数;然后在第 2 行中按 因子1因子2……*因子k 的格式输出最小的连续因子序列,其中因子按递增顺序输出,1 不算在内。
输入样例:
630
输出样例:
3
567
#include<iostream>
#include<math.h>
#include<stdio.h>
#include<algorithm>
#define maxn 10001
using namespace std;
int isprime(int n){
int i;
for(i=2;i<sqrt(n)+2;i++){
if(n%i==0){
return 0;
}
}
return 1;
}
int main(void){
int n,i,j,k,sum,a=0,b=0;
scanf("%d",&n);
if(isprime(n)){
printf("1\n");//判断是否为质数,是则输出1和本身
printf("%d\n",n);
return 0;
}
for(i=2;i<sqrt(n)+2;i++){
if(n%i==0){//判断n能否整除i,减少循环
sum=i;
for(j=i+1;j<sqrt(n)+2;j++){
sum*=j;
if(n%sum!=0){//不能整除跳出循环
break;
}
}
if(a<j-i){//更新最大长度及最小位置
a=j-i;//最大长度
b=i;//最小位置
}
}
}
printf("%d\n",a);
for(i=b;i<=a+b-1;i++){
if(i!=b){
printf("*");
}
printf("%d",i);
}
return 0;
}
题目三7-7 倒数第N个字符串 (15 分)
给定一个完全由小写英文字母组成的字符串等差递增序列,该序列中的每个字符串的长度固定为 L,从 L 个 a 开始,以 1 为步长递增。例如当 L 为 3 时,序列为 { aaa, aab, aac, …, aaz, aba, abb, …, abz, …, zzz }。这个序列的倒数第27个字符串就是 zyz。对于任意给定的 L,本题要求你给出对应序列倒数第 N 个字符串。
输入格式:
输入在一行中给出两个正整数 L(2 ≤ L ≤ 6)和 N(≤105)。
输出格式:
在一行中输出对应序列倒数第 N 个字符串。题目保证这个字符串是存在的。
输入样例:
3 7417
输出样例:
pat
思路:同十进制求各个位数一样,先模再除。eg:189的各个位–189%10–18%10 and so on~此题相当于26进制求各个位
#include<stdio.h>
#include<math.h>
#define maxn 6
int main(void){
int l,n,i,k;
char ch[maxn];
scanf("%d %d",&l,&n);
int p=pow(26,l)-n;//总个数-倒数数=此数的顺数
for(i=l-1;i>=0;i--){
k=p%26;
ch[i]=k+'a';
p/=26;
}
printf("%s",ch);
return 0;
}