當前位置:首頁 » 編程語言 » c語言盒子和糖果放置問題
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言盒子和糖果放置問題

發布時間: 2022-05-01 07:27:10

A. 求救,有一個c語言程序設計編程題目,請高手幫忙,萬分感謝

#include<stdio.h>
#include<time.h>
intmain()
{
ints,r;
intm[100]={0};
inti,j;
for(i=0;i<20;i++)
{
j=rand()%100;
if(m[j]==0)
m[j]=10;
else
i--;
}
for(i=0;i<10;i++)
{
j=rand()%100;
if(m[j]==0)
m[j]=-5;
else
i--;
}
for(i=0;i<70;i++)
{
j=rand()%100;
if(m[j]==0)
m[j]=-1;
else
i--;
}
s=0;
srand((int)time(0));
for(i=0;i<40;i++)
{
printf(" 第%d次,輸入R:",i+1);
scanf("%d",&r);
j=rand()%100;
s+=m[j]*r;
printf("抽到%dr,%s%d,當前本金:%d ",m[j],m[j]>0?"獲得":"損失",m[j]*r,s);
}
printf("最終本金:%d",s);
}

前面三個循環主要是隨機初始化倍率數組。

B. C語言編程 吃糖果的問題 難!!!!

只有在T組糖果中,當任意的某一種糖果的數量 - 剩餘T-1種糖果的數量之和 ≥ 2的情況下,才不可能吃完。其他任何情況下都可以吃完。

證明: 設糖果有T種, 每一種有X1,X2,X3,......XT 個。
步驟一: 取X1,X2,X3........XT 中最小值Xmin。(即標准地每種吃一個,直到把最少的那一組吃完)
那麼接下來剩餘的糖果種類為T - 1。每一種有X1-Xmin1,X2-Xmin1,X3-Xmin1.......XT-Xmin1 個
步驟二:在剩餘的T-1種糖果中,找出數量最少的。(即X1-Xmin,X2-Xmin.......XT-Xmin中最少的)
那麼剩餘的糖果種類為T-2,每一種有X1-Xmin1-Xmin2,X2-Xmin1-Xmin2.......XT-Xmin1-Xmin2個
重復以上步驟直到最後只剩一種糖果,這個糖果的數量為,Xmax - Xmin1- Xmin2 - Xmin3 ....- Xmin(T-1)
當這個糖果的數量為0的情況下,就可以吃完。不為0的情況下就不可以吃完。
考慮最差情況,即每一次只吃最多的一種糖果和最少的一種糖果。(每次吃2種,其他糖果不吃)
那麼最後剩餘糖果的數量為 Xmax - X1-X2 -X3 ....-XT
當這個值為1時 則可以吃完。大於1時 則吃不完。

接下來編程就非常容易了。
遍歷一遍T組糖果中每種糖果的數量,然後算一下就行了。

C. 一道C語言問題

我打了個暴力程序(就過了樣例,也不知道有沒有錯),因為程序有點太暴力了,所以算到n=15就開始慢下來。可以看到答案是有規律的。首先從n=1到15答案分別是1,2,2,3,3,3,3,4,4,4,4,4,4,4,4(也是因為答案太有規律了,就懶得筆算暴力程序到底對不對了)。可以看出來,答案中1、2、3、4的個數分別是1,2,4,8。看到這里大概規律就可以很明顯的知道了吧。
假設暴力程序沒有錯,答案也是按照上述規律排列的話……那麼假設答案是ans,那麼2^0+2^1+2^2+……2^(ans-2)<=n<=2^0+2^1+2^2+……2^(ans-1)
這里其實主要就是計算2的等比數列求和。這個公式很好推的,Sn={a1*(1-q^n)}/1-q。
也就是 S(ans-2)<=n<=S(ans-1)
題目里沒講到T的數據范圍就有點頭疼。

如果T不是很大的話,找ans的話可以考慮二分答案求,整個程序下來復雜度就大約為Tlog2(n)
上面的內容一口氣打下來的,不知道有沒有錯……
後面是我那個暴力的程序orz
#include<iostream>
#include<cstdlib>
#include<cmath>
#include<cstdio>
using namespace std;
int box[10000],MIN;
int dfs(int a,int num)
{
bool choose[51];int sum;int max_now;
for(int i=1;i<=50;i++)choose[i]=0;
max_now=0;
for(int i=1;i<=a;i++)max_now=max(max_now,box[i]);
// cout<<a<<""<<num<<" "<<max_now<<endl;
for(int i=1;i<=max_now;i++)
{
sum=0;
for(int j=1;j<=a;j++)
{
if(box[j]>=i)box[j]-=i,choose[j]=1;
sum+=box[j];
}
if(sum)dfs(a,num+1);
else {MIN=min(MIN,num);}
// cout<<a<<""<<num<<" "<<max_now<<" "<<MIN<<" "<<sum<<endl;
for(int j=1;j<=a;j++)
if(choose[j])box[j]+=i,choose[j]=0;
}
}
int main()
{
int a;
for(int i=1;i<=50;i++)
{
MIN=10000000;
for(int j=1;j<=i;j++)box[j]=j;
dfs(i,1);
cout<<MIN<<" ";
}

}

D. C語言編程怎麼解決分糖問題

分糖果問題

幼兒園有n(<20)個孩子圍成一圈分糖果,老師先隨機地發給每個孩子若干顆糖果,然後按以下規則調整:每個孩子同時將自己手中的糖果分一半給坐在他右邊的小朋友;如共有8個孩子,則第1個將原來的一半分給第2個,第2個將原有的一半分給第3個……第8個將原來的一半分給第1個,這樣的平分動作同時進行;若平分前,某個孩子手中的糖果是奇數顆,則必須從老師那裡要一顆,使他的糖果變成偶數。小孩人數和每個
小孩的初始數由鍵盤輸入。經過多少次調整,使每個孩子手中的糖果一樣多,調整結束時每個孩子有糖果多少顆,在調整過程中老師又新增發了多少顆糖果。

#include<stdio.h>
#defineN20

intn;
intequal(int[]);
intmain()
{
intnum=0,count=0,i,t1,t2;
intchild[N];
printf("請輸入小孩數:");
scanf("%d",&n);
printf("請輸入每個小孩手中的原始糖數:");
for(i=0;i<n;i++)
scanf("%d",&child[i]);
while(!equal(child))
{
for(i=0;i<n;i++)
{
if(child[i]%2!=0)
{
child[i]+=1;
num+=1;
}
}
t1=child[0];
for(i=0;i<n;i++)
{
t2=child[(i+1)%n];
child[(i+1)%n]/=2;
child[(i+1)%n]+=t1/2;
t1=t2;
}
count+=1;
for(i=0;i<n;i++)
printf("%d",child[i]);
printf(" ");
}
printf("經過%d次交換後糖數相等,糖數是%d顆 調整過程中新發%d顆糖 ",count,child[1],num);
return0;
}
intequal(intchild[])
{
inti;
for(i=1;i<n;i++)
if(child[i]!=child[i-1])
return0;
return1;
}

運行結果

E. c語言在線答疑,求高人指導~~~謝謝了~~~

第一個:你定義的是char,其表示範圍是-128到127;你的0345是八進制數,換算成十進制是229,原碼是11100101,反碼是10011010,補碼是10011011,其表示的就是-27的二進制數在計算機裡面的存儲

第二個:((ch=getchar())=='g') ,這個條件判斷中的ch=getchar()這個表達式的值在你輸入a的時候,不等於'g',循環終止。所以是0次。

第三個:putchar(n%10+'0');n=321,n%10+'0'=』1『;if((i=n/10)!=0) printd(i)中,i=n/10 的值是32,後面遞歸調用函數本身。3次函數調用輸出的字元分別是'3','2','1'。

第四個:抱歉,你給的答案是錯誤的。輸出結果應該是abcabcabcbcabcc;原因如下:二維數組裡面存的是abc,abc,abc這9個字元。循環3次輸出分別從第一個,第五個,第九個字元輸出。

第五個:這個是函數的遞歸調用。第一次輸入a,並遞歸到下一層輸入b,再遞歸到下一層輸入#
條件符合退出遞歸,輸出當前層的c,即#,退回上一層輸出當前c,即b,再退回上一層輸出當前c,即a。這就是ab##ba。

第六個:這個是由於define中的M+M沒有加()。表達式經編譯器編譯後就是M+M*M+M*5,就是55。如果在define中加上括弧,即(M+M),表達式就是(M+M)*(M+M)*5了。

第七個:你在swap中交換的是指針的值,不是指針指向的空間的值。所以沒有交換成功。就是原來的12和15。

完了。。我真是閑的呵呵。。。。大半夜睡不著覺。。。。

F. c語言編程 十層的架子,每層放的糖果數都是前一層的2倍多1塊,第十層放4607塊糖果,第一層放了多少塊糖果

第一層放了7塊糖果。

#include<stdio.h>

intresult(intn)
{
if(n==1)
return4607;
else
returnresult(n-1)/2-1;
}

intmain(void)
{
printf("第一層放了%d塊糖。 ",result(10));
return0;
}

G. 這一道c語言題目誰能幫我解答一下十分感謝...

試了幾個都對,應該可以

#include<stdio.h>

intmain()

{

intn,k;

longlongsum=0;

scanf("%d%d",&n,&k);

for(inti=0;i<n;i++)

{

sum=(1+n-i)*(n-i)/2;

if((sum-i)==k)

{

printf("%d",i);

break;

}

}

return0;

}

H. c語言編程

這個題目太簡單了,不過我想問問,那個盒子是怎麼構成的,以及老鼠是怎麼咬盒子的?

I. c語言編程問題,如圖所示

主函數里第二句中的char修改為*pArray即可。
作詳細說明前,請允許我多說一些對於指針的理解,因為不確定po主是否了解指針,所以我把我的理解給你說一下,希望能起到一些幫助。
指針和一般變數都可以當做一個盒子,每個盒子都有自己該處的位置(地址),不同之處在於一般變數的盒子里存放著具體的數值或字元(其實字元也相當於數值),而指針的盒子里存放著別的盒子的位置(地址)。
說明如下(以下的pArray統一用p簡稱):
*p[]是一個存放指針的數組,該數組每個元素都是一個指針,也就是說每個元素存放的都是一個地址,而非具體數值。
所以我們可以知道,p是代表這個數組本身的首地址,也就是這些連續著的指針的首地址;而*p是代表數組內指針指向的首地址,也就是這批「盒子」里放的東西(那些字元串的地址);*(*p)是代表那些字元串。
顯而易見,若我們想知道這批「盒子」的數量,那就是用總盒子的長度,除以每個盒子的長度,就可以得到結果,即sizeof(p)/sizeof(*p)。(如果沒記錯的話,同一個數組內每行所分配的內存長度都是一致的)
望採納,謝謝。

J. c語言 包裝問題

這個用不著遞歸,且用遞歸會有非常「醜陋」的感覺,就用普通的湊法即可。
程序:
#include "stdio.h"
#include "stdlib.h"

void main()
{
int i,j,k;
for(i=1;i<=600/8;i++)
for(j=1;j<(600-i*8)/5;j++)
{
k =(600-i*8-j*5)/2;
if(k*2+i*8+j*5==600)
printf("BigBox %d MedBox %d SmallBox %d\n",i,j,k);
}
system("pause");
}

以上編譯運行通過。