當前位置:首頁 » 編程語言 » 依次報數C語言
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

依次報數C語言

發布時間: 2022-12-19 09:25:03

1. c語言 10人圍一圈,開始依次1到8循環報數,每當報8,此人出圈,至圈中剩一人停止,依次寫出出圈人原編號

#define N 10

struct s
{
int val;
struct s * before;
struct s * next;
};

struct s *head=0,*temp;
int count=N;

main()
{
int i,j;
struct s *p;
printf("\n\n\n");
for(i=0;i<N;i++)
{
p=(struct s*)malloc(sizeof(struct s));
p->val=i+1;
if(head==0)
{
p->before=0;
p->next=0;
head=p;
temp=p;
}
else
{
p->before=temp;
temp->next=p;
temp=p;
if(i==N-1)
{
temp->next=head;
head->before=temp;
}
}
}
temp=head;
i=1;
while(count>1)
{
if(i==8)
{
printf("%d,",temp->val);
count--;
(temp->before)->next=temp->next;
(temp->next)->before=temp->before;
temp=temp->next;
i=1;
}
else
{
i++;
temp=temp->next;
}
}
printf("the last is %d",temp->val);
}

2. C語言 有n個人圍成一圈,按順序從1到n編號。從第一個人開始報數,報數3的人退出圈子

#include <stdio.h>
#define N 9999
int main()
{
int n,a[N],*p,i=0,out=0,count=0;
printf("Input n(n must be a natural number less than 10000):");
scanf("%d",&n);
if(n>=10000)
printf("n is out of range of valid values.");改為printf("%d is out of range of valid values.",n);
else
{
for(i=0;i<=n;i++) 改為a[i]=i;
a[i+1]=i; //這樣做a[0]是個不確定的值,執行完p=a;後*p
p=a; 的值也是不確定的,後面的if判斷條件不確定了
while(out!=n){ 這兒應該是out!=n-1吧
if(*p!=0) 這段可以改成這樣for(;;){ if(*p!=0){
count++; count++;p++;}結束if
if(count==3){ if(count==3){ out++; out++;
*p=0; *p=0; break;}結束if
} }結束for
count=0; //此處導致count永遠只能是0或1所以out的值不會變
把這兒的p++刪了 p++; while就成死循環了
if(*p==a[n-1]) 把這個if語句嵌套到if(*p!=0)里的p++後面這兒不要了
p=a;
}
printf("%d",*p);
}
return 0;
}
這樣改完後應該能把最後剩下的號碼打出,其實可以把出局的順序也打出來樓主想想啊,挺簡單的,而且好像有很短的代碼解決這個問題,多思考啊

3. C語言:有n個人圍成一圈,按順序從1到n編號。從第一個人開始報數。

#include<stdio.h>

int main()

{

int i,n,N,out,a[1000];

out=i=n=0;

printf("輸入約瑟夫圈大小 100 ");

scanf("%d",&N);

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

{

a[i]=1;

}

i=0;

while(out!=N-1)

{

if(a[i]==1)n++;

if(n==3){a[i]=0;n=0;out++;}

i++;

if(i==N)i=0;

}

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

if(a[i]==1)printf("最後剩下的是第%d個人",i+1);break;

return 0;

}

(3)依次報數C語言擴展閱讀:

需要說明的是:

1、一個C語言源程序可以由一個或多個源文件組成。

2、每個源文件可由一個或多個函數組成。

3、一個源程序不論由多少個文件組成,都有一個且只能有一個main函數,即主函數。是整個程序的入口。

4、源程序中可以有預處理命令(包括include 命令,ifdef、ifndef命令、define命令),預處理命令通常應放在源文件或源程序的最前面。

5、每一個說明,每一個語句都必須以分號結尾。但預處理命令,函數頭和花括弧「}」之後不能加分號。結構體、聯合體、枚舉型的聲明的「}」後要加「 ;」。

6、標識符,關鍵字之間必須至少加一個空格以示間隔。若已有明顯的間隔符,也可不再加空格來間隔。

網路-c語言

4. C語言 小朋友順逆報數 題目描述 編號為1,2,…,n的n位小朋友依次排成一列,從1號開始1,2,…,m報數, 凡報

你這個數據規模是不要求演算法的,僅要求簡單模擬。
下面的代碼時間復雜度為O(pn):
int s[501];
int i;
int n,m,p;
int KidP;
int count=1;
void Move(int a); //移除第a個小朋友,並將後面剩下的小朋友順序前移一位。
void TakeOut(int a); //將第count個小朋友移除隊列,a=1代表從前面數,a=0代表從後面數。
int main()
{
scanf("%d%d%d",n,m,p);
for( i=1;i<=n;i++) s[i]=i;
while(count<=n-m+1)
{
TakeOut(count%2);
}
for( i=1;i<=n-m+1;i++) printf("%d ",s[i]);
printf("%d\n",KidP);
return 0;
}
void Move(int a)
{
int i;
for(i=a;i<=n-count;i++) s[i]=s[i+1];
return;
}
void TakeOut(int a)
{
if(a==0)
{
if(count==p) KidP=s[count];
Move(count);
count++;
return;
}
else
{
if(n-count+1==p) KidP=s[n-count+1];
Move(n-count+1);
count++;
return;
}
}

5. C語言:有n個人圍成一圈,順序排號。從第一個人開始報數(從1到3報 數),凡報到3的人退出圈子,

#include&lt;stdio.h&gt;

#define N 5//人數

void main()

{

int a[N]={0},i=0,out_n=0,call_n=0,*p;

p=a;

while(1){//循環報數

if(*p==0){//如果健在

if(out_n==(N-1))break;//如果僅剩一人

call_n++;//報數

call_n%=3;//最大為3,到了3就從0開始

if(call_n==0){*p=1;out_n++;}//為0(即3)出局

}

p++;if(p==a+N)p=a;//循環轉向下一人

}

printf("最後剩餘者的編號是:%d ",p+1-a);

}

(5)依次報數C語言擴展閱讀:

printf()函數是格式化輸出函數,一般用於向標准輸出設備按規定格式輸出信息。在編寫程序時經常會用到此函數。

函數的原型為:int printf(const char*format,...);函數返回值為整型。若成功則返回輸出的字元數,輸出出錯則返回負值。

printf()函數的調用格式為:

printf("&lt;格式化字元串&gt;",&lt;參量表&gt;);

其中格式化字元串包括兩部分內容:一部分是正常字元;這些字元將按原樣輸出;另一部分是格式化規定字元,以"%"開始,後跟一個或幾個規定字元,用來確定輸出內容格式。

參量表是需要輸出的一系列參數,其個數必須與格式化字元串所說明的輸出參數個數一樣多,各參數之間用","分開,且順序一一對應,否則將會出現意想不到的錯誤。

規定符

%d十進制有符號整數

%u十進制無符號整數

%f浮點數

%s字元串

%c單個字元

%p指針的值

%e指數形式的浮點數

%x,%X無符號以十六進製表示的整數

%o無符號以八進製表示的整數

%g把輸出的值按照%e或者%f類型中輸出長度較小的方式輸出

%p輸出地址符

%lu 32位無符號整數

%llu 64位無符號整數

6. c語言 報數

#include <stdio.h>
#include <conio.h>
int fun(int n)
{
int i = 0, p, tmp;

while( ++i <= n )
{
p = i * 3;
while (p > n)
p = p - n + (p - n - 1)/(3 - 1);
tmp=p;
}
return tmp;
}

void main()
{int m;
scanf("%d",&m);
printf("n=%d\n",fun(m));
}

7. C語言,兩個人輪流報數,從1開始依次報數,每人每次只能報1個數或2個數,誰先報到30誰獲勝,

邏輯沒看。

你既然用到time函數,頭文件應該導入time.h.

建議少用goto,按照你的代碼結構,可以簡化。以下參照你的代碼改的:

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#definemaxNum30//最大叫數值
intCg(intc);
intHg(intc);
intRn();
intmain()
{
intc=0,n;
while(1)
{
printf("請選擇誰先叫數(1、玩家;2、電腦):");
scanf("%d",&n);
if(n!=1&&n!=2)
printf("輸入錯誤,重新輸入! ");
else
break;
}

while(c<30)
{
switch(n)
{
case1:c=Hg(c);break;
case2:c=Cg(c);break;
}
}

return0;
}
intRn()
{
inta;
srand(time(NULL));
a=rand()%2+1;
returna;
}
intHg(intc)//玩家叫數返回叫數後的累加值參數:c累加值
{
inti=1,n;
while(1)//輸入驗證
{
printf("玩家回合,請輸入叫數次數(1或者2):");
scanf("%d",&n);
if(n!=1&&n!=2)
printf("輸入錯誤,重新輸入! ");
else
break;
}

while(n--)
{
printf("玩家第%d次叫數:%d ",i++,++c);
if(c==maxNum)
{
printf("玩家首先叫到30,玩家勝利!! ");
returnc;
}
}
c=Cg(c);
returnc;
}
intCg(intc)//電腦叫數返回叫數後的累加值參數:c累加變數指針,隨機值
{
inti=1,a=Rn();
printf("電腦回合,電腦叫數次數:%d ",a);
while(a--)
{
printf("電腦第%d次叫數:%d ",i++,++c);
if(c==maxNum)
{
printf("電腦首先叫到30,電腦勝利!! ");
returnc;
}
}
c=Hg(c);
returnc;
}

另外:如果將累加變數c寫成公共變數,或者在main中定義c,然後傳址,代碼還會更簡化。

8. 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);
}
}

9. 如何用C語言編寫:10人圍成一圈,從第1人依次從1到8循環報數,

include<stdio.h>
main()
{
int i,j;
for(i=0;i<10;i++)
{
for(j=8;j<9;j++)
{
printf("第%d人報%d",i,j);
}
}
}

用TC的話不要用中文

10. 一道C語言結構題,求大神解答: n個人依次報數,每報到m從圈中退出,依次輸出退出人的號碼(用數組)

main()
{inta[100],i,j,k;
for(i=0;i<100;i++)
a[i]=1;
for(i=k=0;k<100;k++)
{j=0;
while(j<10)
{i=(i+1)%100;
if(a[i])
j++;
}
a[i]=0;
}
printf("%d ",i);
getch();
}