您的位置:首页 > 其它

求连续数字序列和翻杯子游戏——题集(二十四)

2017-10-08 15:42 295 查看
今天分享一下求数字n的连续数字序列及个数和翻杯子游戏的源代码和运行界面以及一道智商题。

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,请问,你有什么方法,既不浪费药片,又能吃到正确剂量的维生素么?^_^改天揭秘,欢迎评论。

分享到此为止,假期即将结束,愿大家玩的开心,学的尽兴!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息