| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 592 人关注过本帖
标题:[求助]c算法问题???
只看楼主 加入收藏
li_ang
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2006-4-13
收藏
 问题点数:0 回复次数:5 
[求助]c算法问题???
题目:将自然数1到100按顺时针围成一圈,首先取出1,然后顺时针方向按步长L=30取数(已取出的数不再参加记数),直至所有的数均取完为止,最后一个取出的数是多少?

下面是我编写的,不知是否有错,

#include<conio.h>
main()
{int i,j,k=100,a[101;
for(i=1;i<=100;i++)
a[i]=i;
clrscr();
for(j=1;;j=j+30)
{if(k<=30)
break;
if(j>=k)
j=j-k+1;
for(i=j;i<k;i++)
a[i]=a[i+1];
k=k-1;
}
printf("%4d",a[j]);
}
搜索更多相关主题的帖子: 算法 
2006-04-13 20:26
lmatt
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2006-3-30
收藏
得分:0 
以下是引用li_ang在2006-4-13 20:26:00的发言:
题目:将自然数1到100按顺时针围成一圈,首先取出1,然后顺时针方向按步长L=30取数(已取出的数不再参加记数),直至所有的数均取完为止,最后一个取出的数是多少?

下面是我编写的,不知是否有错,

#include<conio.h>
main()
{int i,j,k=100,a[101;//a[101]
for(i=1;i<=100;i++)
a[i]=i;
clrscr();
for(j=1;;j=j+30)
{if(k<=30)//这个好象不能完成你所说的条件吧.
break;
if(j>=k)
j=j-k+1;
for(i=j;i<k;i++)
a[i]=a[i+1];
k=k-1;
}
printf("%4d",a[j]);
}


2006-04-13 21:09
abingchem
Rank: 6Rank: 6
等 级:贵宾
威 望:24
帖 子:716
专家分:0
注 册:2004-12-30
收藏
得分:0 
为什么不用循环链表呢?

此人已消失
2006-04-13 21:28
rellorsky
Rank: 1
等 级:新手上路
帖 子:17
专家分:0
注 册:2006-4-14
收藏
得分:0 
这个问题用单向循环连表很容易解决!如果用循环可以用下边的程序比较麻烦!
#include <stdio.h>
main()
{
int ch[100];
for(int ii=0; ii<100; ii++){
ch[ii]=ii+1;
printf("%d\t",ch[ii]);
}
printf("\n");
int z=0;
int u=0;
printf("%d\t",ch[z]);
ch[z]=0;
for(;;){
for(int g=0; g<100;g++){
// printf("%d\t",ch[g]);
if(ch[g]!=0)
u++;
}
// printf("\n");
if(u<30)
return 0;
else u=0;
for(int j=0;j<30;){
if(z<100){
if(ch[z] !=0)
j++;
z++;
}
else{
z=0;
}
}
printf("%d\t",ch[z-1]);
// printf("\n");
ch[z-1]=0;
}
}

[此贴子已经被作者于2006-4-14 20:02:03编辑过]

2006-04-14 20:00
andyss
Rank: 1
等 级:新手上路
帖 子:189
专家分:0
注 册:2006-4-8
收藏
得分:0 
用链表会不会好一点.

幽幽黄桷兰----建四狼
2006-04-14 21:47
andyss
Rank: 1
等 级:新手上路
帖 子:189
专家分:0
注 册:2006-4-8
收藏
得分:0 

这是我得程序,还有点问题,大家看一下:
   #include <stdio.h>
#include <stdlib.h>
struct student{
int num;
struct student *last;
struct student *next;
};
main(){
int i,m,n;
struct student *temp,*nums[100];
m=0;
for(i=0;i<100;i++) nums[i]->num=i;
for(i=0;i<100;i++){
nums[i]->last=nums[(99+i)%100];
nums[i]->next=nums[(i+1)%99];
}
temp=nums[0];
for(;;){
if(temp->next==NULL){
printf("the number is: %d",temp->num);
exit(1);
}
if(m%30==0){
n=temp->num;
temp->last->next=temp->next;
free(nums[n]);
}
temp=temp->next;
m++;
}
}


幽幽黄桷兰----建四狼
2006-04-16 19:43
快速回复:[求助]c算法问题???
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.012484 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved