12.15山师停训赛

#12.15山师停训赛(补题)!!!打的贼烂。。。

##1柳雨欣的舔狗行为

Description
某一天柳予欣想去舔爱慕已久却得不到的小姐姐(f译萱)。第一天他去给她偷偷发了一条信息,第二和第三天每天发两条信息,第四到第六天每天发三条信息。。以此类推。可惜小姐姐早就把他给屏蔽了。请问到第K天位置柳予欣一共发了多少条信息?
Input
输入为一个数字n(1<=n<=1e5)
Output
输出柳予欣发的信息条数。
Sample Input

1000

Sample Output

29820

这是我解出来的第一题,我写的代码比较复杂,这是我室友想的(他数学超好),大体思路是利用两个for循环,第一个,是 判断信息数,从一开始递增,而第二个是判断每个信息对应的天数,一条信息对应发一天,两条信息对应发两天。同时在第二个循环中定义一个t,作为天数,用if判断当他t>输入的天数m时,跳出循环。

#include<stdio.h>
int main(){
	int m,sum=0,t=0;
	scanf("%d",&m);
	for(int i=1;;i++){
		for(int j=1;j<=i;j++){
			sum=sum+i;
			t++;
			if(t>=m)
			break;
		} 
		if(t>=m)
			break;
	}
	printf("%d",sum);
	return 0;
}

``

##2柳予欣和她女朋友的购物计划

Description
一天,柳予欣和她的一个女朋友fyx去买包包。可惜的是柳予欣现在手里只有两种面值的钱a,b(a,b彼此互为素数,即这两个整数的公因数只有1),数量无限大。为了不让自己没面子,他想知道无法准确支付的物品中(就是不通过找零,用非负数个钱a与钱b不能凑成的价格中),最贵的价值是多少金币?
Input

输入数据仅一行,包含两个正整数,它们之间用一个空格隔开,
分别表示a,b的面值。(a和b均大于1,且均小于1,000,000,000)

Output
输出所求数即可。
Sample Input

3 7

Sample Output

11

这个题是有思维难度的,我们可以想一个素数和一个素数的最小公倍数是他们的乘积,当这个最小公倍数减去其中一个素数的时候,他就不在包含另一个素数的公因子,同样减去另一个素数的时候,他也不再是这个素数的公因子,所以素数的乘积减去这两个素数的和,就是所要求的,最贵价值金币。

#include<stdio.h>
int main(){
	long long a,b;//注意题目条件 
	scanf("%lld%lld",&a,&b);
	printf("%lld",a*b-a-b);
	return 0;
} 

##3

Description
The hot summer came so quickly that fyx and lmz decided to buy a big and sweet watermelon. They want to cut the watermelon in two parts, and the weight of each part is an even number.They quickly decide which melon to buy. Do you know if you want to buy this melon?
Input

Only one line contains one integer ww (1\leq w\leq 100)
(1≤w≤100),units are kilograms.

Output
If it can meet the requirements, you will output “YES”, otherwise output “NO”.
Sample Input

8

Sample Output

YES

这也是一道送分题,不过是英文的并且有坑,在为2的时候,我们要知道一分为二后是奇数,所以要单独讨论。直接上代码了

#include<stdio.h>
int main(){
	int m;
	scanf("%d",&m);
	if(m==2)
	printf("NO");
	else
	if(m%2==0)
	printf("YES");
	else
	printf("NO");
	return 0;
} 

##4

Description
给出一个正整数n,是否可以用若干个不相同的斐波那契数的和来表示给出的数?
如果可以表示,给出使用最少斐波那契数个数的表示方法,降序输出这些斐波那契数;如果不可以表示,输出-1。
Input
多组输入,每行一个正整数n(0<=n<=9e18)。应注意的是当n为0的时候为无效输入,应不进行操作继续读入下个数据。
Output
满足题意的序列,每两个数之间空一格,序列末尾为换行。
Sample Input

114514
0
1

Sample Output

75025 28657 6765 2584 987 377 89 21 8 1
1

Source
Forsaken

这道题源于一个定理–齐肯多夫定理,反正开始没听过,后来看大佬的代码才稍微懂了点。各位自行体会吧

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll a[100],n;
int main(){
	a[1]=a[2]=1;
	for(int i=3;i<=92;i++)a[i]=a[i-1]+a[i-2];
	while(~scanf("%lld",&n)){
		if(!n)continue;
		ll sum=0,flag=1;
		for(int i=92;i;i--)
			if(sum+a[i]<=n){
				sum+=a[i];
				if(sum==n)flag=1;
			}
		if(!flag){
			printf("-1\n");
			continue;
		}
		sum=0;
		for(int i=92;i;i--)
			if(sum+a[i]<=n){
				sum+=a[i];
				if(sum!=n)printf("%lld ",a[i]);
				else printf("%lld\n",a[i]);
			}
	}
}

补题暂且到这,由于我C++还未学,并且脑子比较笨,后续题目会陆续补上,2333333!!!!

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值