编程题报数
#include<stdio.h>
intmain()
{inti,n,k=0;
scanf("%d",&n);
for(i=1;i<=n;i++)
if(i%7==0||i%10==7)k++;
printf("%d",k);
return0;
}
2. java编程 有n个人围成一个圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出
publicclassIncrease{
publicstaticvoidrep(boolean[]people){
inti=0,j=0,n=people.length,m=n;
while(n>2){
i=++i%m;
if(people[i]==true){
j++;
if(j==3){
people[i]=false;
System.out.println(i);
n--;//总人数减1
j=0;//到3从头数
}
}
}
}
publicstaticvoidmain(String[]args){
booleanpeople[]=newboolean[10];
for(inti=0;i<10;i++){
people[i]=true;
}
rep(people);
}
}
main函数为测试例子,打印结果如下
3
6
9
2
7
1
8
5
3. c语言报数问题
设有n个人围坐一圈并按顺时针方向从1到n编号,从第s个人开始进行1到m的报数,报数到第个m人,此人出圈,再从他的下一个人重新开始1到m的报数,如此进行下去直到所有的人都出圈为止。现要求按出圈次序,每10人一组,给出这n个人的顺序表。请考生编制函数Josegh()实现此功能并调用函数WriteDat()把结果p输出到文件OUT.DAT中。
设n=100,c=1,m=10.
(1)将1到n个人的序号存入一维数组p中;
(2)若第i个人报数后出圈,则将p[i]置于数组的倒数第i个位置上,而原来第i+1个至倒数第i个元素依次向前移动一个位置;
(3)重复第(2)步直至圈中只剩下p[1]为止。
部分源程序已给出。
请勿改动主函数main()和输出数据函数writeDat()的内容。 #include <stdio.h>
#define N 100
#define S 1
#define M 10int p[100],n,s,m;
void WriteDat(void);void Josegh(void)
{}void main()
{
m=M;
n=N;
s=S;
Josegh();
WriteDat();
}void WriteDat(void)
{
int i;
FILE *fp;
fp=fopen("out.dat" ," w" );
for(i=N-1;i>=0;i--){
printf(" %4d" ,p[i]);
fprintf(fp," %4d" ,p[i]);
if(i % 10==0){
printf("\n" );
fprintf(fp, "\n" );
}
}
fclose(fp);
}
/* 注:题中第一个for()循环是先对数组p赋初值。在第二个for()中用i来控制没出圈的
总人数,s1=(s1+m-1)%i的作用是找出报数后出圈人的下标,其中对i求余的作用是使报
数按圈进行(即报到尾后又从头报),该算法在很多题目中都用到。由于求余的作用当
报数正好到最后一个时s1为0,故而要进行if(s1==0)的判断。内嵌的for()循环是将出圈
以后的人依次往前移。*/
void Josegh(void)
{
int i,j,s1,w;
s1=s;
for(i=1;i<=n;i++)
p[i-1]=i;
for(i=n;i>=2;i--)
{s1=(s1+m-1)%i;<br>if(s1==0)<br>s1=i;<br>w=p[s1-1];<br>for(j=s1;j<i;j++)<br>p[j-1]=p[j];<br>p[i-1]=w;<br>}
} 这的问题和这个一样,看看吧,应该能解决了
4. C语言编程报数问题
自己写的,完整的程序,并附有测试的数据。
分别用链表和顺序表实现了。楼主可以好好看看。
http://..com/question/411820901.html?oldq=1
代码我就不重复贴了。好运!
5. C语言,报数问题
这个问题是着名的Josephus排列,就是要用指针和链表才是正确的思路。不用指针就暂时放置这题。若有非指针解你完全可以采纳他,若没有用指针正确写的,请结贴。给你个用指针并且还用链表的代码参考以便你在未来学会指针后来阅读。
http://blog.csdn.net/z84616995z/article/details/37969175
6. 报数问题(编程)
#include<iostream.h>
int main()
{
int a[30]={1,1},n=2,m=0;
for(;n<30;n++)
{a[n]=a[n-1]+a[n-2];
if(a[n]%3==0)
m++;}
cout<<m<<endl;
system("PAUSE");
return 0;
}
7. c语言编程题,有一队士兵送1-5依次报数时,最后一个人报1,从1-6报数时,最后一个人报5,
你可以改写N的值,还有就是楼上的,前面俩个条件加上,你的程序结果不存在;
10000以内是2111.4421.6731.9041
#include<stdio.h>
#define N 10000 //士兵的人数范围
int main()
{
int i;
for(i=11;i<N;i++)
{
if((i%6==5)&&(i%5==1)&&(i%7==4)&&(i%11==10))
printf("满足条件的士兵数: %d\n",i);
}
}
8. 第二题c语言编程。15个人围成一圈,从第一个人开始顺序报数1234567凡事数到7的退出游戏,找出
#include"stdio.h"
intmain(void){
intn=15,m=7,s=0;
for(inti=1;i<=n;i++)
s=(s+m)%i;
printf("Hispreviousnumberis%d ",s%n+1);
return0;
}
9. c语言函数题:报数
#include
#include
#define n 200
void tian(int(*p)[n])
{
int i, j;
int mn=p[n-1][n-1];
for (i=0; i<mn; ++i)
{
for (j=0; j<mn; ++j)
{
if ((i+j==mn-1))
{
p[i][j]=1;
continue;
}
if ((i+j>mn-1))
{
p[i][j]=2;
continue;
}
if ((i+j<mn-1))
{
p[i][j]=3;
continue;
}
}
}
}
int main()
{
int a[n][n];
int i, j;
int len;
scanf("%d", &len);
a[n-1][n-1]=len;
tian(a);
for (i=0; i<len; ++i)
{
for (j=0; j<len; ++j)
printf("%2d", a[i][j]);
printf("\n");
}
return 0;
}
10. 编程问题:17个人围一桌,从0号开始报数1,数到三的倍数的离开,直至最后一个人,求他原来几号
由于楼主的太乱,我自己写了一个,楼主可以试试,成功运行的话可以作为参考:
#include <stdio.h>
int main()
{
int iTmp=0,iCount=0,iPoint=0,isAll[17]={0};
//iTmp临时变量,iCount已经出列的人数,iPoint计数,isAll数组是全部人的号码数组。
for(iTmp=0;iCount<15;iTmp=(iTmp+1)%17)
//iCount<15数16个人(0到15),iTmp=(iTmp+1)%17依次指向下一个号码。
{
if(1==isAll[iTmp])continue; //只要该号码所代表的人离开了,就不计数。
if(0==++iPoint%3){isAll[iTmp]++;iCount++;} //每次有人离开,号码+1作标示,计数。
}
//下面两行输出是为了直观的看见全部人的状态。可以更改做只输出没离开的人的号码。
for(iTmp=0;iTmp<17;iTmp++)printf("%2d ",iTmp+1); //因为电脑编号由0开始,所以+1。
printf("/n");
for(iTmp=0;iTmp<17;iTmp++)printf("%2d ",isAll[iTmp]);
printf("/n");
return 0;
}