问题 A: 幸运数字III
题目描述
小李非常喜欢数字4和7,看到一个数字他就想快速计算出因子里面分别有几个4和7,但是智商捉急的他总是要算很久,喜欢编程的你能够帮助他吗?
输入
第一行一个整数n(3<=n<=2^60),表示给定的数字。
输出
两个用空格隔开的数字,分别表示给定数字的因子中4和7的个数。
样例输入
112
样例输出
2 1
提示
112=4*4*7
#include<stdio.h>
typedef long long ll;
int main()
{
ll n;
while(~scanf("%lld",&n)){
ll ans1=0,ans2=0;
if(n==0){
printf("0 0\n");
continue;
}
for(;;){
if(n%4==0){
n/=4;
ans1++;
}else if(n%7==0){
n/=7;
ans2++;
}else{
printf("%lld %lld\n",ans1,ans2);
break;
}
}
}
return 0;
}
问题 B: 英雄卡
时间限制: 1 Sec 内存限制: 128 MB提交: 226 解决: 58
[ 提交][ 状态][ 讨论版]
题目描述
小李非常迷恋收集各种干脆面里面的英雄卡,为此他曾经连续一个月都只吃干脆面这一种零食,但是有些稀有英雄卡真的是太难收集到了。后来某商场搞了一次英雄卡兑换活动,只要你有三张编号连续的英雄卡,你就可以换任意编号的英雄卡。小李想知道他最多可以换到几张英雄卡(新换来的英雄卡不可以再次兑换)。
输入
第一行,共一个整数n(1<=n<=10000),表示小李拥有的英雄卡数。
第二行,共n个空格隔开的数字ai(1<=ai<=100000),表示英雄卡的编号。
第二行,共n个空格隔开的数字ai(1<=ai<=100000),表示英雄卡的编号。
输出
输出仅有一行,共1个整数,表示小李最多可以换到的英雄卡。
样例输入
6
3 1 2 4 4 5
样例输出
1
提示
1 2 3三张编号连续,可以换一张,换完后剩下4 4 5,不符合兑换规则,无法继续兑换。
#include<stdio.h>
#include<algorithm>
using namespace std;
int minz(int a,int b,int c)
{
return min(min(a,b),c);
}
int main()
{
int a[100005]={0},n,x,ans=0;
scanf("%d",&n);
for(int i=0;i<n;i++){
scanf("%d",&x);
a[x]++;
}for(int i=1;i<=100000;i++){
if(a[i]>=1&&a[i+1]>=1&&a[i+2]>=1){
x=minz(a[i],a[i+1],a[i+2]);
ans+=x;
a[i]-=x;a[i+1]-=x;a[i+2]-=x;
}
}printf("%d\n",ans);
return 0;
}
问题 C: 最强阵容
时间限制: 1 Sec 内存限制: 128 MB提交: 137 解决: 40
[ 提交][ 状态][ 讨论版]