SDU 程序设计思维与实践 Week13 必做题

A

给出 k 个奇偶性相同的正整数,使得其和等于 n。
例如 n = 10,k = 3,答案可以为 [4 2 4]。

思路

当n为奇数时,必有奇数个奇数组成。然后分情况讨论

代码

#include<iostream>
#include<algorithm>
using namespace std;
int T,n,k;
int a[105];
int main(){
	cin>>T;
	while(T--){
		cin>>n>>k;
		if(n%2==1&&k%2==0){
			//n为奇数 k为偶数 
			cout<<"NO"<<endl;
			continue;
		}
		if(k>n){
			cout<<"NO"<<endl;
			continue;
		} 
		//1、n为奇数 k为奇数
		if(n%2==1&&k%2==1){			
			for(int i=0;i<k;i++){
				if(i==k-1) a[i]=n;
				else{
					a[i]=1;
					n--;
				}
			}
		}
		//2、n为偶数 k为偶数 
		if(n%2==0&&k%2==0){
			for(int i=0;i<k;i++){
				if(i==k-1) a[i]=n;
				else{
					a[i]=1;
					n--;
				}
			}
		}
		//3、n为偶数 k为奇数   需要k个偶数 		
		if(n%2==0&&k%2==1){
			if(n<2*k){
				cout<<"NO"<<endl;
				continue;
			}
			for(int i=0;i<k;i++){
				if(i==k-1) a[i]=n;
				else{
					a[i]=2;
					n-=2;
				}
			}
		}
		cout<<"YES"<<endl;
		for(int i=0;i<k;i++){
			cout<<a[i]<<" ";
		}
		cout<<endl;  
	} 
} 

B

给出无法被 n 整除的第 k 大的正整数。
例如 n = 3,k = 7,则前 7 个无法被 n 整除的正整数为 [1 2 4 5 7 8 10],答案为 10。

思路

1——n-1无法被整除,n+1——2n-1无法被整除…统计k中属于第几段即可。
注意需要判断k能被n-1整除的情况

代码

#include<iostream>
#include<algorithm>
using namespace std;
int T,n,k,ans;
int main(){
	cin>>T;
	while(T--){
		cin>>n>>k;
		ans=k/(n-1)*n+k%(n-1);
		if(k%(n-1)==0) ans--;
		cout<<ans<<endl;
	}
} 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值