2设计函数Fri(int M,int n),功能是将M个人围成一圈,编号为1—M,从第1号开始报数,报到n的倍数的人离开,一直数下去,直到最后只剩下1人。求此人的编号。
用c++做不是C 第一题我做好了
追答稍微改了一下
#include
#define N 100
using namespace std;
void Fri(int M,int n){
int count=0;//计数器
int i=0;//控制循环的变量
int p=0;//出场后玩家的人数(每局一个玩家出场)
int a[N]={0};//将储存玩家名称的数组初始化为0
for(i=0;i1)//当p大于1人时就进行游戏
{
for(i=0;i<M;i++)//从第i个玩家开始数
{
if(-1!=a[i])//如果第i个玩家的名称没有被修改为-1,证明他还在游戏中,
count++; //数一下他
if(n==count)//如果数到N的倍数
{
cout<<a[i]<<"\t";//加上此句可以看出出场的顺序
a[i]=-1;//将名称标记为1,即出局
count=0;//计数器归零
p--;//参与游戏的玩家数-1
}
}
}
for(i=0;i<n;i++)//当只剩余1名玩家时,查找到唯一没有标记为1的玩家,并且将其打印
{
if(-1!=a[i])
cout<<a[i];
}
}
int main()
{
Fri(10,3);
return 0;
}
M也从键盘输入
追答#include
#define N 100
using namespace std;
void Fri(int M,int n){
int count=0;//计数器
int i=0;//控制循环的变量
int p=0;//出场后玩家的人数(每局一个玩家出场)
int a[N]={0};//将储存玩家名称的数组初始化为0
for(i=0;i1)//当p大于1人时就进行游戏
{
for(i=0;i>M;
cout>n;
Fri(M,n);
return 0;
}
#define N 100 是起什么作用?
追答因为M是变量,变量是不能作为数组长度的,所以就给数组一个初始值N=100,也就是最多100个人游戏,要是最多一万个人,就改为#define N 10000.
追问但是如果M>N怎么破?
追答不好意思,程序有点小bug,已经修正
#include
#define N 100
using namespace std;
void Fri(int M,int n){
int count=0;//计数器
int i=0;//控制循环的变量
int p=0;//出场后玩家的人数(每局一个玩家出场)
int a[N]={0};//将储存玩家名称的数组初始化为0
for(i=0;i1)//当p大于1人时就进行游戏
{
for(i=0;i>M;
cout>n;
Fri(M,n);
return 0;
}
1
#include<iostream>
using namespace std;
int main()
{
int n;
double total;
cout<<"input the the n: "<<endl;
cin>>n;
int i=0;
for(i=0;i<n;i++)
{
double flag;
if(i%2==0)
{
flag=1;
}
else
{
flag=-1;
}
total+=(flag)/(i+1);
}
cout<<"total is: "<<total<<endl;
}
2
#include<iostream>
using namespace std;
struct person //定义结构体
{ int data;
person *next;
};
class josering //定义约瑟夫类
{
public:
josering(int x , int y );
void getdata();
private:
person *front;
int n ;
int m ;
};
josering::josering(int x,int y) //构造循环链表
{
n=x;
m=y;
person *p,*rear;
for(int i=1;i<=n;i++)
{
p=new person;
p->data=i;
if(i==1) //当只有一个数据时,头指针和尾指针都指向第一个元素
{
front=p;
rear=p;
}
else
{
rear->next=p; //为指针随着数据往后移动
rear=p;
}
}
rear->next=front;
}
void josering::getdata() //获取出列的人的编号
{
person *p1,*p2,*p;
p1=front;
for(int i=1;i<n;i++)
{
int counter=1;
while(counter++<m)
{
p2=p1;
p1=p1->next;
}
p=p1;
cout<<"第"<<i<<"次出列的人的编号为:"<<p->data<<endl;
p2->next=p1->next;
p1=p1->next;
delete p;
} cout<<"最后一个出列的人的编号为:"<<p1->data<<endl;
}
void main()
{
int n,m;
cout<<"请输入总人数:";
cin>>n;
while (n<1)
{
cout<<"n值错误,请重新输入:";
cin>>n;
}
cout<<"请输入m值:";
cin>>m;
while (m<1)
{
cout<<"m值错误,请重新输入:";
cin>>m;
}
josering test(n,m); //定义对象检测程序
test.getdata();
}
这个可以吧
1编写函数求:1-1\/2+1\/3-1\/4+...+1\/n C++
int count=0;\/\/计数器 int i=0;\/\/控制循环的变量 int p=0;\/\/出场后玩家的人数(每局一个玩家出场)int a[N]={0};\/\/将储存玩家名称的数组初始化为0 for(i=0;i<M;i++)\/\/从1开始依次为每个玩家命名(赋值){ a[i]=i+1;} p=M;\/\/初始条件为参与人数为p while(p>1)\/\/当p大...
用C++编写程序函数求表达式1-1\/2+1\/3-1\/4+1\/5-1\/6+1\/7-...+1\/n的值
int k = 1;for(int i = 1; i <= n; i++){ sum += (1.0\/double(i))*k;k = k*(-1);} return sum;}
编写程序,求1-1\/2+1\/3-1\/4+1\/5……+1\/n
C++版本 double fun(int n){ double sign=1;double sum=0;for(int i=1;i<=n;i++){ sum+=sign\/i;sign*=-1;} return sum;} 大概就是这样
C++:数列求和:1-1\/2+1\/3-1\/4……1\/n
\/\/#include "stdafx.h"\/\/vc++6.0加上这一行.#include <iostream>using namespace std;int main(void){\/\/1-1\/2+1\/3-1\/4……1\/n int i,n; double sum; cout << "Input n(>0 int):\\nn="; cin >> n; for(sum=0,i=1;i<=n;sum += i&1 ? 1.0\/i+...
C++计算式子(n!是指n的阶乘) 1-1\/2!+1\/3!-1\/4!+...-1\/n! 我不知道该...
比如n=3,就计算1-1\/2!+1\/3!cin>>maxn;for(i=1;i<=maxn;i++){ n=n*i;if(i%2==0)n=-n;\/\/偶数项为负值 t=1\/n;sum=sum+t;if(n<0)n=-n;\/\/把n变回正数 } cout<<"1-1\/2!+1\/3!-1\/4!+...="<<sum<<endl;}\/\/试验过了,不懂可追问 ...
C语言编程,s=1+1\/2-1\/3+1\/4-1\/5...+1\/n,
i%2!=0) \/\/这里应该是ij=-j;s+=j;}printf("%lf\\n",s); \/\/double用%lf long float}void main(){int n;double s=1;printf("N:");scanf("%d",&n);if(n==1) \/\/==比较用等号printf("%lf\\n",s); \/\/elsefun(n); \/\/传参,没有返回值!\/\/s=fun();} ...
c++程序设计设s=1+1\/2+1\/3+...+1\/n,求与八最接近的s的值与其对应的n值...
取小者(相等时取前一项)的最后一项的n便是题解。代码如下:include "stdio.h"int main(int argc,char *argv[]){int n;double s;s=n=0;do{s+=1.0\/++n;}while(s<8);if(s-8 > 8-s+1.0\/n)s-=1.0\/n--;printf("s = %f\\tn = %d\\n",s,n);return 0;}运行结果如下:...
C语言题求 s=1\/1!-1\/2!+1\/3!-1\/4!+……+1\/n!的解答过程?高手快来啊...
s=1\/1!-1\/2!+1\/3!-1\/4!+……+1\/n!\/ int _tmain(int argc, _TCHAR* argv[]){ int fact(int n);int n;double total=0;cout<<"输入n:";cin>>n;for (int i=1;i<=n;i++){ if (i%2!=0)total+=1\/(double)fact(i);else total-=1\/(double)fact(i);} cout<<"...
(c++)多项式的描述如下:1 - 1\/2 + 1\/3 - 1\/4 + 1\/5 - 1\/6 + ...现 ...
n小于1000精度应该还行,直接暴力吧 double ans = 1.000;for(int i = 2; i <= n; i++){ if(i % 2 == 0) ans -= 1\/i; else ans += 1\/i;}最后的ans就是结果
用C++编写程序,计算s=1-1\/2+1\/4-1\/6+……-1\/98+1\/100?
以下是用C++编写的计算程序:include<iostream> include<cmath> using namespace std;int main(){ double s = 0.0;for(int i = 1; i <= 100; i++){ if(i % 2 == 1) \/\/奇数项 { s += 1.0 \/ i;} else \/\/偶数项 { s -= 1.0 \/ i;} } cout << "s = " << s ...