当前位置:首页 » 编程语言 » c语言五个水手
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

c语言五个水手

发布时间: 2022-11-15 14:39:34

c语言编程水手分椰子问题,我自己写了一段程序,答案不对

这道题我也想了很久,看了网上很多方法都是直接给出公式算,我自己找了下这个问题的规律,用迭代和逆向递推的方法解决了这个问题,具体代码如下:(程序附有注释,建议大家动笔画画图,看看不同水手个数的情况是怎么样的,这样就可以理解了)

#include<stdio.h>
#include<stdlib.h>
#include<math.h>

main()
{
intn;//水手个数

printf("Inputn(1<n<=5): ");
scanf("%d",&n);

//增加程序的健壮性
if(n>1&&n<=5)
printf("y=%d ",Coconu(n));
else
printf("Error! ");

system("pause");
}

intCoconu(intn)
{
inti;//内层循环变量
intj=1;//外层循环变量,
ints;//原来椰子的个数
intr;//迭代变量

do//第一层循环:增加最后一名水手平均分完之后的每一份椰子数,从1开始(1最小)
{
r=j*n+1;//最后一名水手总的椰子数

//第二层循环:利用迭代及反向递推的方法求出原先的椰子数
for(i=n-1;i>0;i--)
{
//在迭代过程中,如果逆向递推出现不能整除的情况,则跳出循环。(因为椰子必须是整个的)
if(r%(n-1)!=0)
break;
//迭代
s=(r/(n-1))*n+1;
r=s;
}

j++;
}while(i!=0);//i=0则表示完成了循环,整个循环完成s才是最终的原先的椰子个数

returns;
}

❷ 我想问一下五个水手分椰子的问题,不说c语言,现在我觉得3121也是答案,能解释一下吗

问题只说一半,我看了你的提问,首先是去网络了你问的是什么。。。。
如果我搜索的不错,你问的问题是不是:
水手分椰子问题。五个水手发现了一堆椰子,第一个水手把椰子分成5等分,多出一个给了猴子自己藏起了一堆;第二个水手把剩下的椰子混合再分,又分为5等分,多出1个给了猴子,自己藏起1堆,第三,四个水手也同样来分第五个水手把椰子分为5等分后,正好多出1个给猴子,问这堆椰子有多少个?
如果是这个,C代码我就不写,因为我网络搜索问题的时候,也在网络文库看到了代码= =
至于你说的
3121
跟着逻辑走一遍就知道是不是了
第一水手 (float)(3121-1)/5 =624 拿走624 留下2496(624*4)
第二水手 (float)(2496-1)/5=499 拿走499 留下1996(499 *4)
第三水手 (float)(1996-1)/5=399 拿走399 留下1596(399 *4)
第四水手 (float)(1596-1)/5=319 拿走319 留下1276(319 *4)
第四水手 (float)(1276-1)/5=255 拿走255 留下1020(255*4)

❸ c语言 如何一行输入五个数

输入五个数的时候就实现换行。。先记住你所输入的数字个数,当达到5的时候就换行。
do
{scanf("%d",&t);
i++;
}whlie(i!=5);
或者for(i=0;i<=4;i++)scanf("%d",&t);printf("\n");
主要的思想就是对输入的数进行计数,以五个为一行。。

❹ 用C语言写程序输出要求控制每行输出五个数,怎么控制

在C语言写程序输出时,要控制每行输出数据的个数,可以通过自定义计数器来完成。
如:
// 输出自然数1-30,每5个数为一行
main()
{ int i;
int cnt=0; // 定义cnt用作输出数据的计数器,初始为0
for( i=1;i<=30;i++ ) // 循环30次
{ printf("%5d",i); // 输出数据值
cnt++; // 每输出一个值,计数器加一次
if( cnt%5==0 ) // 假设每行输出5个(如果计数器与5取余为0,则换行)
printf("\n"); // 输出换行
}
}
定义一个计数器,然后每次就自加,当%5==0的时候就printf("\n");看例子,希望能帮到你。
#include
void
main()
{
int
count=0;
int
i;
for(i=1;i<=20;i++)
{
printf("%d\t",i);
count++;
if(count%5==0)
printf("\n");
}
}

❺ C语言输入五个学生的信息,并交其输出

#include "stdio.h"
struct student
{
int num;
char name[20];
float score[3];
}stu[5];
main()
{
int i,j,k,n=1;
for(i=0;i<5;i++)
{
printf("第%d个学生的信息:\n",n);
scanf("%d",&stu[i].num);
scanf("%s",stu[i].name);
for(j=0;j<3;j++)
{
float score;
scanf("%f",score);
stu[i].score[j]=score;
}
n++;
}
for(k=0;k<5;k++)
{

printf("%d %s %f %f %f",stu[k].num,stu[k].name,stu[k].score[0],stu[k].score[1],stu[k].score[2]);
printf("\n");
}
}

❻ C语言有五个学生每个学生有4门课程的成绩要求在用户输入学生序号后输出该学生的全部成绩用指针函数实现

int main()
{
int a[5][4]={{0,10,20,30},{20,30,40,50},{30,40,50,60},{40,50,60,70},{60,70,80,90}};

int number;
printf("请输入序号(1--5):");
scanf("%d",&number);
printf("四门课的成绩是:");
for (int i=0;i<4;i++)
printf("%d ",*(a[number-1]+i));
return 0;
}

❼ 关于c语言的问题

e是以10为底数的意思
数学里面科学计数法经常用的10的多少次方
+002则是10的正2次方
好比
0.1
如果用e就是
1e-1
1乘以10的负1次方
10e-2
10乘以10的负2次方
这两个数都等于0.1,而c语言默认都是小数点前面1位数
所以你的123.456当然等于1.23456
x
10的2次方
即1.23456e+002

❽ C语言设计“有五个数,去掉一个最大数和一个最小数,求剩下三个数的平均数”

先求5个数的总和啊,然后用比较找出最大的数和最小的数,分别保存。
然后从5个数中减去最大的数和最小的数,除以3

平均数。

❾ c语言程序设计

//经过测试了,答案是正确的!答案是 19531

# include<iostream.h>
int main()
{
int fruit=7,rest,round=0;
rest=fruit;
while(1)
{
if((rest%5)!=1)
{
round=0;
fruit++;
rest=fruit;
continue;
}
rest=(rest-1)/5;
round++;
if(rest==1 && round==6) break;
if(rest==1 && round!=6)
{
round=0;
fruit++;
rest=fruit;
continue;
}
if(rest!=1 && round==6)
{
round=0;
fruit++;
rest=fruit;
continue;
}
}
cout<<"这堆椰子有: "<<fruit<<" 个!"<<endl;
return 0;
}

❿ C语言 五个数排序

#include<stdio.h>

void sort(int a[])

{int i,j,t;

for(i=0;i<4;i++)

for(j=i+1;j<5;j++)

if(a[i]>a[j])

{t=a[i];a[i]=a[j];a[j]=t;}

}

int main()

{int i,j,a[6][5];

for(i=0;i<6;i++)

{ for(j=0;j<5;j++)

scanf("%d",&a[i][j]);

sort(a[i]);

}

for(i=0;i<6;i++)

{printf("Case %d:",i);

for(j=0;j<5;j++)

printf(" %d",a[i][j]);

printf(" ");

}

return 0;

}