求连续数字序列和翻杯子游戏——题集(二十四)
2017-10-08 15:42
295 查看
今天分享一下求数字n的连续数字序列及个数和翻杯子游戏的源代码和运行界面以及一道智商题。
first:求连续数字序列
求数字n的连续数字相加的个数和序列。即一组连续的数字相加为n,即使数字n的一组连续输子序列。
比如:数字3的连续数列只有1个,序列为: 1 2
源代码如下:
运行结果如下:
second:翻杯子游戏
现在有n个茶杯,杯口向上为正(1),杯口向下为负(0),Angle和Bob玩一个游戏,杯口全部为正的赢,而每一次每个人只能把一个杯口向下的杯子翻正,且这个杯子以后的杯子状态逆转,正变为负,负变为正。每次输入一组个数不确定并且状态不确定的杯子,游戏从Angle先开始,两个人都很聪明,都希望自己赢,判断谁会赢?
源代码如下:
运行结果如下:
附送一道智商题:某人每天要吃一片A维生素和一片B维生素,量是一定的,不能多吃,也不能少吃,某天,某人在倒出一片A后,手一抖,倒出两片B,而此时某人分不清AB,不知道哪一个是B,请问,你有什么方法,既不浪费药片,又能吃到正确剂量的维生素么?^_^改天揭秘,欢迎评论。
分享到此为止,假期即将结束,愿大家玩的开心,学的尽兴!
first:求连续数字序列
求数字n的连续数字相加的个数和序列。即一组连续的数字相加为n,即使数字n的一组连续输子序列。
比如:数字3的连续数列只有1个,序列为: 1 2
源代码如下:
//求数字的连续数字相加的个数和序列 #include<iostream> using namespace std; int TheNum(int n){ int num=0;//连续数字相加的个数 int sum=0;//当前所有值的和 int leftval=1;//序列左端值 int rightval=1;//序列右端值 cout<<endl<<"数字"<<n<<"连续数字相加的序列为: "<<endl; while(leftval<=rightval && rightval<=n){ if(sum == n){//当前所有值的和等于n num++;//连续数字相加的个数加加 for(int i=leftval; i<rightval; i++){//打印当前序列 cout<<i<<" "; } cout<<endl; } else if(sum > n)//当前所有值的和大于n,leftval值加1 { sum-=leftval; leftval++; continue; } sum+=rightval; rightval++; } return num; } int main(){ int n; printf("请输入数字: "); cin>>n; if(n>0 && n<INT_MAX){ cout<<endl<<"数字"<<n<<"连续数字相加的个数为: "<<TheNum(n)<<endl<<endl; } return 0; }
运行结果如下:
second:翻杯子游戏
现在有n个茶杯,杯口向上为正(1),杯口向下为负(0),Angle和Bob玩一个游戏,杯口全部为正的赢,而每一次每个人只能把一个杯口向下的杯子翻正,且这个杯子以后的杯子状态逆转,正变为负,负变为正。每次输入一组个数不确定并且状态不确定的杯子,游戏从Angle先开始,两个人都很聪明,都希望自己赢,判断谁会赢?
源代码如下:
#include<iostream> #include<cmath> using namespace std; //0后是1为A,全0为A,0后为0是B #include<vector> bool IsWho(long long n, vector<bool> aim){ bool flag=true; if(aim[n-1]==false) flag=0; int i=n-1; for(; i>0; i++){ if(aim[i] != false){ break; } } if(i<=0) flag=1; return flag; } int main(){ long long n; cin>>n; int flag=0; if(n>=1 && n<=pow(10,9)){ vector<bool> aim(n,false); for(int i=0; i<n; i--){ cin>>flag; if(flag==1) aim[i]=true; } if(IsWho(n,aim)) cout<<"Angle"<<endl; else cout<<"Bob"<<endl; } return 0; }
运行结果如下:
附送一道智商题:某人每天要吃一片A维生素和一片B维生素,量是一定的,不能多吃,也不能少吃,某天,某人在倒出一片A后,手一抖,倒出两片B,而此时某人分不清AB,不知道哪一个是B,请问,你有什么方法,既不浪费药片,又能吃到正确剂量的维生素么?^_^改天揭秘,欢迎评论。
分享到此为止,假期即将结束,愿大家玩的开心,学的尽兴!
相关文章推荐
- 和为S的两个数字VS和为S的连续正数序列
- 和为S的两个数字 VS 和为S的连续正数序列
- 和为s的两个数字VS和为s的连续证正数序列
- 笔试算法题(15):-1到N中包含1的数字的个数 & 连续和为N的序列
- 面试题41:和为s的两个数字VS和为s的连续正数序列
- 面试题41:和为s的两个数字,和为s的连续正数序列
- JavaScript实现找出数组中最长的连续数字序列
- 剑指offer面试题 和为s的两个数字 VS 和为s的连续正数序列
- 剑指offer 41. 和为s的两个数字VS和为s的连续正数序列
- 递增数列中和为s的两个数字,和为s的连续正数序列
- 剑指Offer之 - 和为s的两个数字 VS 和为s的连续正数序列
- 剑指offer-和为s的两个数字VS和为s的连续正数序列
- 《剑指Offer》学习笔记--面试题41:和为s的两个数字VS和为s的连续正数序列
- 和为s的两个数字VS和为s的连续正数序列
- 41-所有和为s的连续正数序列/递增数列中和为s的两个数字
- 【剑指offer-Java版】41和为s的两个数字VS和为s的连续正数序列
- 面试题41:和为s的两个数字 VS 和为s的连续正整数序列
- 有序数组中和为定值的数字对与和为定值的连续正整数序列
- [剑指offer][面试题41]和为s的两个数字 VS 和为s的连续正数序列
- 面试题41:和为s的两个数字VS和为s的连续正数序列