Intelligence math problem,分糖果问题
这里写自定义目录标题
Description
一共有N个孩子,按顺时针方向从1到N排成一圈的孩子们正在等糖果。他们的老师按以下方式分发糖果:首先,老师给1号和2号孩子每人一个糖果。然后他顺时针沿着圆圈走,跳过一个孩子(3号孩子),给下一个孩子(4号孩子)一个糖果。然后他继续散步,跳过两个孩子(5号和6号孩子),给下一个孩子(7号孩子)一块糖果,然后跳过三个孩子在发一个糖果等等。现在你必须告诉老师在无限走下去的情况下所有的孩子是否都会得到至少一个糖果?
Input
第一行包含一个整数 T,接下来有T组测试数据,对于每一组测试数据,输入一个整数n Data limit:1≤T≤60,1≤n≤10^18
Output
对于每一组测试数据,输出对应答案.如果能分到请输出YES,否则输出NO
Sample Input 1
2
2
3
Sample Output 1
YES
NO
分析问题
小白一个,其实这是一个数学问题通过第一步分析你会发现,孩子单数和双数是不一样的。n为单数
只需循环判断n次,双数需循环判断2n次。再往下循环重复。
于是我的初始代码
#include <stdio.h>
#include <time.h>
#include <string.h>
#include<stdlib.h>
#define maxn 100000000
long long a[maxn];
int main(){
long long n;
int t,i,j,k,count;
memset(a,0,sizeof(a));
scanf("%d",&t);
while(t--)
{
a[1]=1;a[2]=1;
j=2;count=1;
scanf("%lld",&n);
if(n%2==0)
for(i=2,k=1;k<=2*n;k++){a[i]=1; i=i+j; j++;while(i>n){i=i-n; } }
elsefor(i=2,k=1;k<=n;k++){a[i]=1;i=i+j;j++;while(i>n){i=i-n; } }for(k=1;k<=n;k++){if(a[k]==0)count=0;}if(count==1)printf("YES\n"); elseprintf("NO\n"); for(k=1;k<=n;k++){a[k]=0;}
}return 0;
}
发现超时,想了好久才发现,孩子的个数n,n是2的次数的时候,(2,4,8,16,32,等等)
每个孩子都能得到糖果,反之n不是2的次数,就永远输出NO,题目就变成了判断n是否为2的次数
改进后代码
#include <stdio.h>
#include <time.h>
#include <string.h>
#include<stdlib.h>
int main(){long long n;
int t,i,j,k,count;
scanf("%d",&t);
while(t--)
{
scanf("%lld",&n);if(n&(n-1)) //使用与运算判断一个数是否是2的幂次方 printf("NO\n"); elseprintf("YES\n");
}return 0;
}
Intelligence math problem,分糖果问题相关推荐
- hunnu11543:小明的烦恼——分糖果
Problem description 小明在班里一直是个非常公正的孩子.这点同学和老师都非常清楚,这不,老师每周都会从家里带来一些糖果.然后叫小明把糖果分给其它小朋友,但这个班里的同学都有一个非 ...
- 贪心算法简单实践 -- 分糖果、钱币找零、最多区间覆盖、哈夫曼编解码
1. 贪心算法概览 贪心算法是一种算法思想.希望能够满足限制的情况下将期望值最大化.比如:Huffman编码,Dijkstra单源最短路径问题,Kruskal最小生成树 等问题都希望满足限制的情况下用 ...
- leetcode1103. 分糖果 II 该模拟就模拟,别老想着优化
排排坐,分糖果. 我们买了一些糖果 candies,打算把它们分给排好队的 n = num_people 个小朋友. 给第一个小朋友 1 颗糖果,第二个小朋友 2 颗,依此类推,直到给最后一个小朋友 ...
- P7909 [CSP-J 2021] 分糖果 方法二
https://www.luogu.com.cn/problem/P7909 /* P7909 [CSP-J 2021] 分糖果 方法二 好 https://www.luogu.com.cn/prob ...
- 58同城笔试题:数组去重;分饼干(分糖果);最小路径和(leetcode64)
1. 数组去重 题目描述 /*** 有序数组去重* 输出最终的数字个数* 输入:1,2,2* 输出:2* @author Turing**/ 代码 import java.util.*; public ...
- Leetcode - 1103. 分糖果 II 排排坐,分糖果。
分糖果 II 排排坐,分糖果. 我们买了一些糖果 candies,打算把它们分给排好队的 n = num_people 个小朋友. 给第一个小朋友 1 颗糖果,第二个小朋友 2 颗,依此类推,直到给最 ...
- 洛谷刷题C语言:潇湘の雨、分糖果、Addition、Ljeto、TRI
记录洛谷刷题C语言QAQ 「PMOI-0」潇湘の雨 题目背景 (原 LZOI-1,改名已经 PMOI 成员同意) lhm-01 题目描述 言琢დ 在一个 2n×2n2n \times 2n2n×2n ...
- 牛客网----分糖果、分子弹
题目来源:牛客网 给从左至右排好队的小朋友们分糖果, 要求: 1.每个小朋友都有一个得分,任意两个相邻的小朋友,得分较高的所得的糖果必须大于得分较低的,相等则不作要求. 2.每个小朋友至少获得一个糖果 ...
- 分糖果问题-----medium
1.题目描述 力扣原题:原题链接 优秀题解:二分搜索类问题 力扣https://leetcode-cn.com/problems/maximum-candies-allocated-to-k-chil ...
最新文章
- java获得服务器路径的几中方法
- Nginx中浏览器缓存的相关概念
- java环境变量中classpath是必须配置吗
- 前端基础-jQuery的优点以及用法
- linux系统服务设置命令--chkconfig命令参数及用法详解
- 下载anaconda时出现“Please make sure you are connected to the internet”警告
- Linux系统查看华为存储型号,linux 查看服务器存储
- Hibernate学习笔记--映射配置文件详解
- SpringBoot实战教程(2)| 整合knife4j3.0.3
- Windows系统下快速安装、配置Aira2,及图形界面配置、度盘、B站视频下载
- python全栈马哥_马哥2018python全栈视频
- vue使用jsMind思维导图类库
- 【工具】损坏视频文件修复MP4/MOV格式
- 为什么要学习多种编程语言
- 用Python做一个自动发送邮件的工具
- 转 解决打印机无法打印的方法
- JavaEE | 泛型
- 计算机管理中其它设备问号,Win10设备管理器中设备上有白色问号如何解决
- 智能手机 + 机器学习 = 个人终端的未来
- Golang:加密解密算法
热门文章
- SAP 能不能撤销已冲销的凭证?能的话怎么操作?
- 简单易懂的Socket TCP网络通讯知识-消息协议和数据包
- shell -- expr命令
- VLDB 2023 | 北大河图发布分布式训练神器Galvatron, 一键实现大模型高效自动并行...
- win10+1050ti+CUDA9.0+cudnn9.0的tensorflow-gpu环境搭建
- Apache ECharts快速入门
- dede后台生成没反应,更新不了的解决方案(完美解决)
- 基于steam的游戏销量预测 — PART 1 — 爬取steam游戏相关数据的爬虫
- 基于Windows10+Python3.8.5+RTX3060实战yolov5准备工作
- 高级攻防研究员-红队管理