A. c語言,報數問題
你這代碼想法有問題:消去3的倍數的數,在第一次,還可以,第二次,則不知道該如何消除了,因為,數的排列變化了(有了間隔),而且,你也沒有考慮,數到最大值後,程序該怎麼辦?
B. c語言 退出整個程序或函數的命令是什麼
c語言退出整個程序或函數的命令是return、goto 、break 、break。
1、return 返回;
return 表示從被調用函數返回主調函數繼續執行,返回時可附帶一個返回值,由return後面的參數設定。
2、goto 無條件跳轉;
goto語句也稱作無條件轉移語句,其一般格式為goto語句標號:其中語句標號是按照標識符規定書寫的符號,放在某一行語句行的前面,標號後加冒號(:)。
3、break 調處最近一層塊;
大多數情況下是終止上一層的循環,C語言中break在switch中執行一條case後跳出語句的作用 使程序跳出switch執行switch以後的語句 如果沒有break switch會從滿足條件的地方執行到switch結構結束。
(2)c語言報數退出擴展閱讀
break語句使用
示例:
#include <stdio.h>
void main()
{
int x=1;
while(x<=4)
{
printf("x=%d ",x);
if (x==3)
{
break;
}
x++;
}
}
C. c語言 報數問題
方法一:(推薦)不受人數限制,因為採用的動態分配
#include <stdio.h>
#include <malloc.h>
/*********************************************************************
*以循環隊列的數據結構實現
*時間復雜度T(n)
*採用循環隊列數據結構,使得每次對數組的訪問次數減少到最少
**********************************************************************/
int main(void)
{
//定義並初始化各種變數
int i=0,//控制變數
num=0,//人數
die=0,//報數值
front,//隊頭位置
rear,//隊尾位置
temp=0;//中間變數
do
{
printf("\n請輸入人數(輸入小於0退出):");
scanf("%d",&num);
printf("\n請輸入報數值:");
scanf("%d",&die);
int *cycle=(int *)malloc((num+1)*sizeof(int));//多申請一個空間,在循環過程中方便處理
//依次編號,一號元素為0,暫時閑置
for(i=0;i<=num;i++)
{
cycle[i]=i;
}
//置隊頭和隊尾的位置
front=1;
rear=num;
i=1;//報數器置1,開始報數
while(front!=rear)//當隊列中元素不止一個時,循環
{
//備份出隊數據
temp=(rear+1)%(num+1);//在位置rear後預留一個位置,以免有元素入隊
cycle[temp]=cycle[front];
front=(front+1)%(num+1);//隊頭元素出隊,隊頭位置加1
//如果出隊的人報數符合條件
if(i==die)
{
i=1;//報數重新置1,開始報數
printf("%d出隊\n",cycle[temp]);//顯示出隊的元素
}
//如果出隊的人報數不符合條件
else
{
i++;//報數值增1
//隊尾插入剛出隊的元素
rear=(rear+1)%(num+1);
cycle[rear]=cycle[temp];
}
}
printf("倖存者是%d\n",cycle[front]);
free(cycle);
}while(num!=0);
return 0;
}
方法二:(按你的要求)
#include <stdio.h>
/*********************************************************************
*以純粹的思維方法實現
*時間復雜度T(n)
*過程繁瑣,而且也不容易理解
*********************************************************************/
void main(void)
{
int result(int *p,int n,int m);
int i=0,m=0,n=0;
int num[50];
int *p;
for(;;)
{
printf("輸入人數和報數值:");
scanf("%d%d", &n, &m);
for(i = 0; i < n; i++)
num[i] = i + 1;
p = num;
cout<<"The last one is NO."<<result(p,n,m)<<endl;
}
}
int result(int *p,int n,int m)
{
int i=0;
for(i=0;i<n;i++)
p[i]=i+1;
i=0; // i為每次循環時計數變數
int k=0; // k為按1,2,3...m報數時的計數變數
int die=0; // die為退出人數
while (die<n-1) // 當退出人數比n-1少時(即未退出人數大於1時)執行循環體
{
if (p[i]!=0) k++; //如果編號為0,就不報數;如果編號不為0,報數加1
if (k==m) // 將退出的人的編號置為0
{
printf("%d退出\n",p[i]);
p[i]=0;
k=0;//重新開始報數
m++;//退出人數加1
}
i++;
if (i==n) i=0; // 報數到尾後,i恢復為0
}
while(*p==0) p++;
return *p;
}
D. C語言編程,報數問題!
#include <stdio.h>
int main()
{
int N,M,*a;
int i,j,position=1,total=0,chage;/*total出隊的人數*/
printf("Enter the N and M\n");
scanf("%d%d",&N,&M);
a=(int *)malloc(N*sizeof(int));
for (i=0;i<N;i++)
a[i]=i+1;
while(1)
{
position+=M-1;
while (position>N-total)
position=position-N+total;
chage=a[position-1];
for (j=position;j<N-total;j++)
a[j-1]=a[j];
a[N-total-1]=chage;
total++;
if (total==N)/*出隊人數等於N,程序結束*/
{
for (i=0;i<N-1;i++)
printf("%d->",a[N-i-1]);
printf("%d\n",a[0]);
return 0;
}
}
}
E. C語言 報數問題
#include<stdio.h>
int main(void)
{
int a[9999],n,i,count,num,*p;
p=&a[0];
count=1;
n=i=num=0;
printf("Input n(n must be a natural number less than 10000):");
scanf("%d",&n);
if(n<=10000)
{
for(i=0;i<n;i++)
a[i]=i+1;
while(num<n-1)
{
count++;
p++; //這里就有越界的可能(p>&a[n-1]),如果這里越界了,那下
面的循環就不會執行了,那麼p就一直++,直到num==n-1
if(p>&a[n-1]) //所以這里就要判斷一下,或者開始時就把a的所有
元素全部初始化為0,就不用這個判斷了
p=&a[0];
while(*p==0)
{
p++;
if(p>&a[n-1])
p=&a[0];
}
if(count%3==0)
{
*p=0;
num++;
}
}
while(*p==0)
{
p++;
if(p>&a[n-1])
p=&a[0];
}
printf("Last No. is:%d",*p);
}
else
printf("%d is out of range of valid values.",n);
return 0;
}
F. C語言有n個人圍成一圈,順序排號。從第一個人開始報數(從1到3報 數)凡報到3的人退出圈子麻煩注釋下代碼
#include<stdio.h>
#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);
}
(6)c語言報數退出擴展閱讀:
printf()函數是格式化輸出函數,一般用於向標准輸出設備按規定格式輸出信息。在編寫程序時經常會用到此函數。
函數的原型為:int printf(const char*format,...);函數返回值為整型。若成功則返回輸出的字元數,輸出出錯則返回負值。
printf()函數的調用格式為:
printf("<;格式化字元串>",<參量表>);
其中格式化字元串包括兩部分內容:一部分是正常字元;這些字元將按原樣輸出;另一部分是格式化規定字元,以"%"開始,後跟一個或幾個規定字元,用來確定輸出內容格式。
參量表是需要輸出的一系列參數,其個數必須與格式化字元串所說明的輸出參數個數一樣多,各參數之間用","分開,且順序一一對應,否則將會出現意想不到的錯誤。
規定符
%d十進制有符號整數
%u十進制無符號整數
%f浮點數
%s字元串
%c單個字元
%p指針的值
%e指數形式的浮點數
%x,%X無符號以十六進製表示的整數
%o無符號以八進製表示的整數
%g把輸出的值按照%e或者%f類型中輸出長度較小的方式輸出
%p輸出地址符
%lu 32位無符號整數
%llu 64位無符號整數
G. C語言報數問題,報到3的人退出圈子,我快瘋了
下面兩種方法是我編寫的 供參考
用指針 數組編寫
#include <stdio.h>
#include <stdlib.h>
int main()
{
int n,i=0,j,k,a,q=0,(*p)[2];
printf("請輸入學生人數:");
scanf("%d",&n);
p=(int (*)[2])calloc(n+1,sizeof(int (*)[2]));
for(i=0;i<n;i++)
{
*(*(p+i)+0)=1;
*(*(p+i)+1)=i+1;
}
*(*(p+n)+0)=0;
*(*(p+n)+1)=n+1;
for (;n!=1;)
{
for(j=i+2,q=0;j<n-q;j+=2,q++)
{
for(k=j;k<n;k++)
{
*(*(p+k)+0)=*(*(p+k+1)+0);
*(*(p+k)+1)=*(*(p+k+1)+1);
}
}
a=n+3-i;
if(a%3==1)i=-1;
else if(a%3==2)i=-2;
else
i=0;
n=n-q;
}
printf("最後剩下的是%d號同學\n\n",*(*(p+0)+1));
return 0;
}
用鏈表編寫
#include <stdio.h>
#include <stdlib.h>
struct stu
{
int f;
int b;
struct stu *next;
};
int main()
{
struct stu *p,*p1,*head=NULL;
int n,i=0,j,k=0,t=0;
printf("請輸入學生人數:");
scanf("%d",&n);
p=(struct stu *)malloc(sizeof(struct stu));
for(i=0;i<n;i++)
{
p1=(struct stu *)malloc(sizeof(struct stu));
p1->f=i+1;
p1->b=1;
if(i==0)
head=p1;
else
p->next=p1;
p=p1;
}
p->next=NULL;
for(j=0;n-t>1;j++)
{
for(p=head;p!=NULL;p=p->next)
{
if((p->b)!=0)
k++;
if(k==3)
p->b=0;
if(k==3)
{
k=0;
t++;
}
}
}for(p=head;p!=NULL;p=p->next)
if(p->b==1)
printf("最後留下的學生編號是:%d\n\n",p->f);
return 0;
}
H. C語言編程報數問題
有n個人a1,a2…,an圍成一圈報數,每報到m的人就出隊#include<stdio.h> void main() { int i,k,m,n,*p,num[50];
I. c語言:圍圈報數123,報三的退出,只剩一人。我用自己思路做了,有個難點,無法解決,望前輩解答。
你的OutRing函數的C語言程序,我幫你改完了,改動的地方比較多,但結構大致沒變,你仔細看看吧(主要問題有判斷兩個數相等要用雙等號,變數或指針for循環用後沒賦初始值)
#include<stdio.h>
voidOutRing(int*pA,intn)
{
intt=1,i,j,k,summary=n,temp=1,*ptemp0,*ptemp1,*ptemp2,*ptemp3;
ptemp0=pA;
ptemp1=pA;
ptemp2=pA;
ptemp3=pA;
for(i=0;i<n;i++)
{
*ptemp0=1;ptemp0++;/*將數組所有元素賦值為1*/
}
i=0;
while(summary>1)
{
summary=0;
if(*ptemp2==1)
{
if(temp%3==0){*ptemp2=0;}temp++;
}
if(i==n-1){
i=0;
ptemp2=pA;
}else{
i++;
ptemp2++;
}
ptemp1=pA;
for(k=0;k<n;k++)
{
summary+=*ptemp1;
ptemp1++;
}
}if(summary==1)
{
for(i=0;i<n;i++)
{
if(*ptemp3==1){printf("結果是%d",(i+1));return;}
ptemp3++;
}
}
}
intmain()
{
inta[100],n=100;
OutRing(a,n);
return0;
}
J. c語言:有n個人圍成一圈,按順序編號。從第1個人開始報數,數到m時該人退出,下
M