算法

yhjj0108 2008-12-12 02:08:19
小明有15个苹果和15个桔子,他现在在选择吃苹果还是桔子,于是他想了个办法,30个水果围成一圈,从第一个水果开始报数,每数到第九个水果就吃掉它,如此循环直到仅剩15个水果为止。问怎样排才能使每次吃到的都是桔子。输出排列中用'#'表示苹果,'%'表示桔子。求好的算法啊!!
...全文
163 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
yhjj0108 2008-12-12
  • 打赏
  • 举报
回复
谢谢了哈。
zhanshen2891 2008-12-12
  • 打赏
  • 举报
回复
输出:
8
17
26
5
15
25
6
18
29
11
23
7
21
4
22

把以上序号下放上橘子即可
zhanshen2891 2008-12-12
  • 打赏
  • 举报
回复
#include "stdafx.h"
#include "windows.h"
#define TOTALCOUNT 30

typedef struct node
{
int nNumber; // 当前节点在链表中的位置
node* pkNext;
}*PNODE;

int naArray[15] = {0}; // 存储链表中的节点位置

PNODE CreateCircle() // 建立循环链表
{
PNODE pHead = new node;
PNODE pText = pHead;
for (int i = 0; i < TOTALCOUNT - 1; i++)
{
pText->nNumber = i;
pText->pkNext = new node;
pText = pText->pkNext;
}
pText->nNumber = TOTALCOUNT - 1;
pText->pkNext = pHead;
return pHead;
}

void HandleNode(PNODE pStart) // 从第一个起每数9个出圈
{
int nCount = 0;
int nNumber = 0;
while (nCount < 15)
{
nNumber++;

if (nNumber == 8)
{
nNumber = 0;
naArray[nCount] = pStart->pkNext->nNumber;
nCount++;
PNODE pTemp = pStart->pkNext;
pStart->pkNext = pStart->pkNext->pkNext;
delete pTemp;
}
pStart = pStart->pkNext;

}
}
void PrintNode()
{
for (int i = 0; i < sizeof(naArray) / sizeof(int); i++)
{
cout << naArray[i] << endl;
}
}
int _tmain(int argc, _TCHAR* argv[])
{
PNODE pHead = CreateCircle();
HandleNode(pHead);
PrintNode();
return 0;
}
SearchLife 2008-12-12
  • 打赏
  • 举报
回复
mark
xtting_8984313 2008-12-12
  • 打赏
  • 举报
回复
我看错了,这个对了,不好意思。
if(Queue[count%30]=='%')
{
count++;continue;
},这个就是了
xtting_8984313 2008-12-12
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 dahua010 的回复:]
C/C++ code#include<stdio.h>voidmain()
{charQueue[30];inti=0;for(i;i<30;i++)
Queue[i]='#';
i=1;intcount=0;intiExit=0;while(iExit!=15)
{if(Queue[count%30]=='%')
{
count++;continue;
}if(i%9==0)
{
Queue[count%30]='%';
iExit++;
}
i++;
count++;
}
printf("%s \n",Queue);
}

随手写的
[/Quote]


本质上就是每次第九个都是橘子,但是要考虑到每次圈的大小可能不相同。
感觉这个没有考虑到这一点,稍微修正就好了。
bobye1230 2008-12-12
  • 打赏
  • 举报
回复
返回结果就是橘子的位置....且按被吃掉的顺序返回
bobye1230 2008-12-12
  • 打赏
  • 举报
回复

#include <vector>
#include <iostream>
using namespace std;

void sort1(int distance/*步长*/, int max/*总数*/, int size/*排序个数*/, vector<int> &ret/*返回结果*/)
{
int pos[max+1];
memset(pos, 1, (max+1)*sizeof(int));
pos[0]=0;//位置0不用...
int current = 0;
for(i=0;i<size;i++)
{
int temp = 0;
while(temp!=distance)
{
current =(++current )%(max+1);
temp+=pos[current ];
}
pos[current ]=0;
ret.push_back(current );
}
}

void main()
{
vector<int> ret ;
sort1(9, 30, 15, ret);
for(int i=0;i<ret.size();i++)
cout<<ret[i]<<endl;
}
laoxu1102 2008-12-12
  • 打赏
  • 举报
回复
你看这样行不:
1、设一有30个节点的循环链表,链表相应数据为1,设置橘子计数器j为0,普通计数器i也为0
2、开始判断:当节点值为-1则跳过,否则普通计数器i++,到9时则将此节点数据由1改为-1,橘子计数器j++;
3、判断j<15,为真则回到2;为假则结束
dahua010 2008-12-12
  • 打赏
  • 举报
回复

#include <stdio.h>
void main()
{
char Queue[30];
int i=0;
for(i;i<30;i++)
Queue[i] = '#';
i=1;
int count = 0;
int iExit = 0;
while(iExit !=15)
{
if(Queue[count%30] == '%')
{
count++;
continue;
}
if(i % 9 == 0)
{
Queue[count%30] = '%';
iExit++;
}
i++;
count++;
}
printf("%s \n",Queue);
}


随手写的
内容概要:本文系统研究了构网型变流器的正负序阻抗解耦特性及其在弱电网环境下的稳定性表现,重点依托Matlab/Simulink仿真平台,构建了详细的阻抗数学模型,设计了解耦控制策略,并采用小信号扫频法进行频域辨识与稳定性验证。研究深入探讨了构网型变流器与传统跟网型逆变器在正负序阻抗特性上的本质差异,结合虚拟同步发电机(VSG)等先进控制技术,分析其在抑制宽频带振荡、削弱锁相环动态耦合等方面的优越性。文中不仅提供了完整的仿真模型与MATLAB代码实现,还整合了光伏、风电、储能、微电网等多类新能源系统的阻抗建模与稳定性分析资源,形成了一套面向新型电力系统稳定性的综合性技术资料体系,具有较强的科研复现与工程参考价值。; 适合人群:面向具备电力电子、电力系统自动化、新能源并网等专业背景的研究生、高校教师及工程技术人员,特别适用于从事阻抗建模、小干扰稳定性分析、宽频振荡机理研究以及撰写高水平学术论文的科研工作者。; 使用场景及目标:①掌握构网型变流器正负序阻抗建模与扫频辨识的仿真方法;②深入理解VSG等构网型控制在弱电网中提升稳定性的内在机理;③复现顶刊论文中的阻抗分析流程与稳定性判据应用;④利用提供的成熟模型与代码加速科研进程,支撑课题研究与学术成果产出。; 阅读建议:建议结合文中提供的Simulink模型与MATLAB代码,按照“理论建模—仿真搭建—扫频激励—频响提取—Nyquist判据分析”的完整流程进行实践操作,重点关注扫频信号的注入方式、频率范围设置及阻抗曲线的物理意义解读,并参考博士论文复现案例深化对复杂动态耦合问题的理解。

65,211

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧