編程朋友數
程序設計思路:
一、小朋友和蘋果都具有多樣屬性(比如高度、編號、狀態等,還可以擴展出姓名,重量等)。所以小朋友和蘋果要定義成結構體。
二、人和蘋果數量都是手動輸入,因此數組大小不確定,要使用動態數組(不使用動態,就得得限制用戶輸入的大小)。
三、題目要求確保摘到的總數最多,從最矮的小朋友開始摘,因此小朋友的數組要進行排序。
四、遞歸函數實現摘蘋果邏輯,每人在自己夠到的范圍中隨機摘兩個(不夠就拿1個)。(遞歸函數每次發現一個可摘取的蘋果,有50%概率看中,都沒看中,默認摘取最後一個看中的蘋果)。
下面是代碼(控制台刷新函數中cls僅限window系統運行,其它操作系統,刪除或修改):

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<malloc.h>
#define AFR 7//蘋果圖像的行數
#define AFC 6//蘋果圖像的行數
#define CFR 5//小朋友圖像的行數
#define CFC 6//小朋友圖像的行數
typedef struct apple//表示蘋果數據的結構體
{
int aid;//蘋果編號
int height;//蘋果的高度
int status;//0:表示未被摘取。1:表示已被摘取
char aframe[AFR][AFC];//表示蘋果的圖像
}APPE;
typedef struct childern//表示小孩子的編號
{
int cid;//小孩子的編號
int height;//小孩子的身高
int n;//小孩摘取的蘋果數量
char cframe[CFR][CFC];//表示小朋友的圖像
APPE **appes;//小孩摘取的蘋果結構指針數組
}CHN;
int n,m;//蘋果和小朋友的個數,設為全局變數
APPE *setApps();//設置蘋果。成功返回結構數組,失敗返回NULL
CHN *setChns();//設置小盆友。同上。
int orderChnByHeight(CHN *chns);//對小朋友數組按照身高升序排列
int getApple(APPE *appes,CHN *chns,char (*strInfo)[100]);//遞歸,模擬小朋友依次選蘋果。異常返回-1
int showFrame(APPE *appes,CHN *chns,char (*strInfo)[100]);
int main()
{
int i;
char (*strInfo)[100]=NULL;//用於顯示操作流水
APPE *appes=NULL;
CHN *chns=NULL;
appes=setApps();
chns=setChns();
if(orderChnByHeight(chns)==-1)return 1;
srand(time(NULL));
strInfo=(char (*)[100])malloc(sizeof(char *)*m*100);
for(i=0;i<m;i++)strInfo[i][0]=0;
if(!strInfo) return 1;
showFrame(appes,chns,strInfo);
return 0;
}
int showFrame(APPE *appes,CHN *chns,char (*strInfo)[100])
{
static int k=1;
int i,j;
system("cls");
printf(" =============每組圖像靠上的數值為高度,靠下的數值為編號============ ");
printf(" =============為確保能拿到最多的蘋果,小朋友們按升序排列============ ");
for(i=0;i<AFR;printf(" "),i++)
for(j=0;j<n;j++)
printf("%s ",appes[j].aframe[i]);
printf(" ");
for(i=0;i<CFR;printf(" "),i++)
for(j=0;j<m;j++)
printf("%s ",chns[j].cframe[i]);
printf(" ==================================================================== ");
printf("操作流水: ");
for(i=0;i<m;i++)
printf("%s ",strInfo[i]);
fflush(stdin);
printf("按下任意鍵進行下一步。。。。。。 ");
getchar();
if(getApple(appes,chns,strInfo)==-1)return -1;
if(k)showFrame(appes,chns,strInfo),k--;
return 1;
}
int getApple(APPE *appes,CHN *chns,char (*strInfo)[100])
{
static int i=0,aflag,cflag;
int j,indexSave;
if(appes==NULL||chns==NULL) return -1;
if(chns[i].n==2)i++;//當前小朋友拿夠2個,換下一個小朋友
if(i==m)return 1;//所有人均拿過,結束遞歸
aflag=0;
for(j=0;j<n;j++)
if(appes[j].status==0) {aflag=1;break;}
if(aflag==0) return 1;//所有蘋果均拿完,結束遞歸
indexSave=-1;
cflag=0;
for(j=0;j<n;j++)
{
if(appes[j].status==0 && appes[j].height<=chns[i].height)
{
cflag=1;
indexSave=j;
if(rand()%2)//每次發現,有50%概率拿取,如所有可拿蘋果都沒選中,選最後發現的目標
break;
}
}
if(cflag)//小朋友拿起一個蘋果的過程
{
appes[indexSave].status=1;
//改變蘋果初始圖像
sprintf(appes[indexSave].aframe[6]," ");
chns[i].appes[chns[i].n]=&appes[indexSave];
chns[i].n++;
if(chns[i].n==1)
{
//改變小朋友初始圖像
sprintf(chns[i].cframe[0]," %c%c/ ",3,1);
sprintf(strInfo[i],"編號%d的小朋友拿取了1個蘋果(編號%d) ",chns[i].cid,chns[i].appes[0]->aid);
}
if(chns[i].n==2)
{
//改變小朋友初始圖像
sprintf(chns[i].cframe[0]," %c%c%c ",3,1,3);
sprintf(strInfo[i],"編號%d的小朋友拿取了2個蘋果(編號%d和編號%d) ",chns[i].cid,chns[i].appes[0]->aid,chns[i].appes[1]->aid);
}
}
if(cflag==0 && chns[i].n==0) sprintf(strInfo[i],"編號%d的小朋友沒有能拿到的蘋果,非常沮喪! ",chns[i].cid),i++;
if(cflag==0 && chns[i].n==1) i++;
return getApple(appes,chns,strInfo);
}
int orderChnByHeight(CHN *chns)
{
CHN chnTemp;
int i,j;
chnTemp.appes=(APPE **)malloc(sizeof(APPE*)*2);
if(!chnTemp.appes) return -1;
else
{
chnTemp.appes[0]=chnTemp.appes[1]=NULL;
if(chns)
for(i=0;i<m-1;i++)
for(j=i+1;j<m;j++)
if(chns[i].height>chns[j].height)
chnTemp=chns[i],chns[i]=chns[j],chns[j]=chnTemp;
}
free(chnTemp.appes);
return 1;
}
CHN *setChns()
{
int i;
CHN *chns=NULL;
printf("請輸入小朋友的個數:");
scanf("%d",&m);
chns=(CHN *)malloc(sizeof(CHN)*m);
if(!chns) return NULL;
printf("請輸入%d個小朋友身高(不超過3位整數): ",m);
for(i=0;i<m;i++)
{
chns[i].cid=i+1;
scanf("%d",&chns[i].height);
chns[i].height=chns[i].height%1000;//超出3位截取
chns[i].n=0;
chns[i].appes=(APPE **)malloc(sizeof(APPE*)*2);
if(!chns[i].appes) return NULL;
chns[i].appes[0]=chns[i].appes[1]=NULL;
//設置小朋友初始圖像
sprintf(chns[i].cframe[0]," \%c/ ",1);
sprintf(chns[i].cframe[1]," / \ ");
sprintf(chns[i].cframe[2],"-----");
sprintf(chns[i].cframe[3],"高%3d",chns[i].height);
sprintf(chns[i].cframe[4],"ID%3d",chns[i].cid);
}
return chns;
}
APPE *setApps()
{
int i;
APPE *appes=NULL;
printf("請輸入蘋果的個數:");
scanf("%d",&n);
appes=(APPE *)malloc(sizeof(APPE)*n);
if(!appes) return NULL;
printf("請輸入%d個蘋果的高度(不超過3位整數): ",n);
for(i=0;i<n;i++)
{
appes[i].aid=i+1;
scanf("%d",&appes[i].height);
appes[i].height=appes[i].height%1000;//超出3位截取
appes[i].status=0;
//設置蘋果初始圖像
sprintf(appes[i].aframe[0],"高%3d",appes[i].height);
sprintf(appes[i].aframe[1],"ID%3d",appes[i].aid);
sprintf(appes[i].aframe[2],"-----");
sprintf(appes[i].aframe[3]," %c ",'|');
sprintf(appes[i].aframe[4]," %c ",'|');
sprintf(appes[i].aframe[5]," %c ",'|');
sprintf(appes[i].aframe[6]," %c ",3);
}
return appes;
}
『貳』 編程課對小朋友的識字量或者數學知識有要求
鏈接:https://pan..com/s/1uyJqLOniY6b2L-g8TUAWmA
希望這份文件可以幫助到您和您的孩子。
想像識字:將漢字變成有趣的圖形和動畫,加深記憶。
1+1學習法:1天學習+1天復習,識字效果事半功倍。
有趣故事:通過識字游戲推進故事發展,強化記憶。
專業朗讀:國家級播音員配音,讓發音更准確。
微信復習:通過微信推送孩子學習進度,並給出復習課程,讓家長幫助孩子鞏固。
合理規劃:由簡到難,每天10分鍾,每天學習6個漢字。
『叄』 T-SQL語句將好友數量超過20的用戶等級提升一個級別
替你去交好友數量超過20的用戶等級提升一個等級完全是可以的。
『肆』 學少兒編程的孩子越來越多,這股風,到底要不要追
前段時間,微信群里總是對一個新型的學科 少兒編程 討論得熱火朝天。
我一開始是持中立態度的,總覺得有追風之嫌。再加上兒子的興趣班挺多的,所以就沒有太在意。
有一天晚上,我帶著孩子准備開車去吃飯,車啟動後,導航軟體語音提示一句:夜間行駛,請您注意安全。沒想到坐在後排兒子的一句話驚到了我,他說:
因為這是一個if Else 條件判斷,如果程序判斷不是白天時間,就會執行夜間模式。
我立馬甩頭到後排,望著孩子看了好久,說:誰告訴你這些的?兒子說是因為在隔壁阿姨家跟大哥哥們玩一個編程 游戲 時,老師這樣教的。
這件事情後,我對編程漸漸有好感了。
1
什麼才是孩子未來最需要的能力?
正巧這幾天看到一些國外推行編程的資料,在一個采訪中,也提到了一個驚人的事實: 在39000多名受訪的開發人員中,有26%的人是在5到15歲開始編寫代碼的。
美國已經有700萬小朋友在學習編程,日本小學生走進APP開發私塾學習編程,英國出台規定要求5歲以上兒童學習編程,歐洲其他16個國家把編程納入教學體系。
就 連以色列,都將編程納入高等學校的必修科目,同時要求孩子從小學一年級就要學習編程。
而在我國,編程已經被浙江、北京、山東、江蘇、重慶等省市加入 中小學必學課程。
信息奧賽競賽人數每年還不足10萬
比起奧數,得獎率高
含金量卻絲毫不遜色
清華前校長陳吉寧也對少兒編程Scratch之父雷斯尼克說過:
中國未來 社會 需要的,是那種邏輯思維縝密,能夠應對變化,提出獨特想法的創造性人才。
我越來越覺得,最關鍵的不是要教孩子多少知識,知識是教不完的,你今天教的這些知識,未來可能會OUT,會有更多更新的知識出現,你怎麼可能一直堅持不懈地給孩子教下去呢?
所以,培養孩子的 探索 精神、解決問題的能力和自主學習的技能才最關鍵。
2
為什麼要讓孩子學編程,幾歲開始學?
在我接觸了編程一段時間後,站在自己的體驗和觀察的角度來說,講講孩子需要學習編程的理由:
>理由一:讓孩子做未來的引領者,而不是被迫淘汰者
未來的10年必定是 科技 時代,而 科技 對各個行業的改造也越來越快。所以,從娃未來安身立命的角度考慮,培養孩子的 科技 思維是絕對沒錯的。 人工智慧的底層邏輯就是編程,未來如果孩子不懂編程,它是沒辦法和智能機器溝通的。
>理由二:英語是通向全球的語言,編程是通向未來的語言,兩個都很重要
現在很多家庭會讓孩子 出國留學 ,也意識到從小學英語的重要性,英語作為一種全球通用語言,孩子接觸的時間越早,肯定越駕輕就熟。目前留學最熱的美國,已經有30%的院校開設編程課,當地政府也希望越來越多的學生可以掌握編程技能,發展學院的特色。
美國前總統奧巴馬
向青少年發起「編程一小時」活動
一個是英語、一個是編程,一個是讓孩子通向全球,一個是讓孩子通向未來,無論遇到多大困難,我們都會堅持學下去。
>理由三:鍛煉孩子邏輯思維能力,而小學是最佳啟蒙期
「編程思維(computational thinking) 」就是 「理解問題——找出路徑」 的思維過程,它由 分解、模式識別、抽象、演算法 四個步驟組成。通過這四個步驟每一個小問題被單獨檢視、思考,搜索解決方案;然後,聚焦幾個重要節點,忽視小細節,形成解決思路;最後,設計步驟,執行——問題解決。
這一點我認為是編程對孩子成長、培養高效的思考模式、做事視角,幫助最大的。
同時,根據教育認知學,孩子會在7歲左右開始形成抽象邏輯思維,整個 7-12歲 是抽象邏輯思維的最佳形成期。
所以 學編程的最佳時機是小學段,趁孩子現在課業負擔不重,邏輯思維也快,幫他們掌握一門有益終生的技能,我覺得就是在正確的時間做正確的事。
>理由四:短期來看,編程對孩子現在的幫助也很大
我身邊有很多孩子學了編程後, 變得聽話了,學習主動性提高了。還有很多孩子粗心毛病改掉了,養成細心 的習慣,
還有學了編程 英語、數學成績提高 的。或者打開上帝視角,開始自己編寫 游戲 , 改掉了 游戲 上癮的壞習慣 。
還有小朋友為了多學會編程, 時間規劃也增強 了......等等,太多案例了,
在這之後,有很多家長朋友們問我,還應該給孩子學一點什麼?最好是孩子未來必須的一些基礎技能。
我都會鄭重地說: 編程 。
在這個 科技 高速發展,AI能夠成為人類潛在威脅的時代,我們更需要把編程這個技能教給孩子。
我並不要求孩子去改變世界,也不是希望他成為工程師、科學家。至少,在這個領域他不能一無所知。
我並不希望,孩子長大之後,跟不上他們那個時代的變化。
而我更希望,孩子可以與時代同步,從容生活乃至引領時代。
3
給想讓孩子學編程的父母幾點建議
1、興趣始終是第一位的
沒有任何一個興趣愛好是適合所有人的,編程也同樣如此。 想讓孩子學編程的基礎就是小朋友有興趣,願意嘗試。
2、別太急功近利
學編程不像學音樂舞蹈美術這些,會有立竿見影的效果。對很多小朋友來說, 編程有助於孩子邏輯思維的鍛煉,系統觀的形成,以及創造能力和解決問題能力的培養。但這些都是潛移默化的,需要有一個積累的過程。
3、可以用在線課程試試水
如果想讓孩子對編程有一個系統的了解,看看孩子興趣怎樣,爸媽們可以找一些在線培訓課程試試水,畢竟價格也不貴。我建議要按兩個原則來選擇。
一看是否有完善的課程體系,能夠讓孩子持續的系統化學習。 市場上有一些機構「拼湊」出的課程,實際上只是讓孩子反復做小練習而已。性價比不高。
二看是編程課程能否與其它學科關聯,與學校的學科教育相呼應,提升單位時間的學習價值。 小朋友們上學後的課外時間本來就不多,如果在編程學習中能融入數學、邏輯、幾何、物理、甚至語文等其它知識,能大大提升學習的性價比。
『伍』 java軟體編程好學嗎
任何編程語言都不是想像中那樣簡單的,想要做到精通更是難上加難,而且Java的學習比其他編程語言更難,但是,有利必有弊,Java雖然難於掌握,但是在應用上確實其他語言不能比擬的,應用范圍也是十分廣泛。所以,想要以後更好的發展,建議還是不斷的挑戰自己,只要不斷的堅持,肯定能夠掌握的。
就拿國內從業比較廣泛的Java開發工程師來講,高中畢業生都可以做。既然高中生都能從事於Java開發,說明軟體開發實際上並沒有我們想的那麼難,畢竟目前所學的軟體技術並不是做科研。

記住,軟體開發需要有一定的基礎,但是並沒有特別高的門檻,只要具備有一定的英文和數學基礎(初高中水平就好了),就可以學軟體開發,尤其是編程語言的使用,因此對於軟體開發而言,只要能夠長期堅持下去,並且多多從事實際項目的開發,就可以積累經驗,達到一個比較高的水平,所以軟體開發並不難學,只要堅持,就可以有所成就。
至於零基礎學java所用的時間,我以培訓時間為標准,大學生一般的學習時間是5-6個月,高中生確在兩年左右。
『陸』 C語言編程語言大全
朋友您好!
其實這不是英文,而是函數名。
讀取:
#include <文件名.h>
定義:
1. int 整型
2. char 字元
3. float 單精度浮點數
4. double 雙精度浮點數
5. long 長整型
還有一個在#include後加
#define 變數名 值
循環:
1. for 【continue (這個為跳過一個循環)】 【break (循環終止)】
2. while
3. do—while
條件:
1. if
2. else
3. else if
輸入輸出:
1. scanf 在dos界面中輸入
2. printf 在dos界面中輸出 通常與scanf通用
3. cprintf 在dos界面中輸出 可加顏色
4. fscanf 在dos界面中輸出 程序尋找地址,後把值傳遞給一個文本文檔
5. fprintf 在文本文檔中輸出
顏色、格式:
1. textcolor 顏色
2. textmode 格式
隨機:
1. randomize
結束:
1. exit 返回原界面
2. return 退出循環
當然還有主函數:
main
望採納!
『柒』 C語言編程 小朋友做游戲
# include<stdio.h>
int main()
{
int a[50], total, number, i,j=0,k;
scanf("%d%d",&total,&number);
k=total;
for(i=0;i<k;i++)
a[i]=1;
while(total!=1)
{
if(total>=number)
{
j=0;
}
else
if(j>number)
j=0;
for(i=0;i<k;i++)
{
if(a[i]!=0)
{
if(j==(number-1))
{
a[i]=0;
total--;
}
j++;
}
}
}
for(i=0;i<k;i++)
if(a[i]==1)
printf("%d\n",i+1);
}
這個是我自己寫的,你看一下,有什麼問題問我!不知道我有沒有理解你題目的意思。
『捌』 急!!!有誰會用c++編程求1000以內的親和數
// friend.cpp : Defines the entry point for the console application.
//#include "stdafx.h"
int p[12] = {2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37}; //1000內只需要考慮這幾個素數
int p2[12] = {2*2, 3*3, 5*5, 7*7, 11*11, 13*13, 17*17, 19*19, 23*23, 29*29, 31*31, 37*37};int power(int n, int i) //返回n^i
{
int s;
s = 1;
if (i > 0)
for (int j = 0; j < i; j ++)
s *= n;
return (s);
}int pdeta(int n, int i) //返回n^i 的因子和1+n+n^2+......+n^i = (n^(i+1) - 1) / (n - 1)
{
if (i == 1)
return (n+1);
else
return ( (power(n, i+1) - 1)/ (n - 1) );
}int deta(int n) //返回n的因子和,不包括n
{
int s = 1;
int m = n;
for (int i = 0; i < 12 ; i ++)
if (n % p[i] == 0)
{
int j = 0;
while (n % p[i] == 0)
{
j++;
n /= p[i];
}
s *= pdeta(p[i], j);
} if (n > 1)
s *= (n + 1); return (s - m);
}int _tmain(int argc, _TCHAR* argv[])
{
// printf("%5d%5d%5d%5d\n", pdeta(2, 1), pdeta(2, 5), pdeta(3, 4), pdeta(5, 2));
// printf("%5d%5d%5d%5d\n", deta(2), deta(4), deta(220), deta(284));
for (int i = 2; i <= 1000; i ++)
if ((deta(i) > i) && (deta(deta(i)) == i))
{
printf("%5d%5d\n", i, deta(i));
}
return 0;
}
『玖』 c+語言 編程 親和數對 應用函數 約數知識 拜託了!!
就本題而言,原程序中的sum()函數過於復雜,而且許多變數的定義根本沒有必要,精簡如下:
//---------------------------------------------------------------------------
#include<stdio.h>
int sum(int n)
{
int i,s=0;
for (i=1; i<n; i++) s+=!(n%i)?i:0;
return s;
}
void main()
{
int l,m,n,sum1,sum2;
scanf("%d",&l);
while(l--)
{
scanf("%d%d",&m,&n);
sum1=sum(n);
sum2=sum(m);
if(sum1==m&&sum2==n)
printf("YES\n");
else
printf("NO\n");
}
}
//---------------------------------------------------------------------------
『拾』 數學題(編程題)詢問 朋友五個問題,找到他生日哪一天
你說的生日是指(某月)的幾號,因此必然是小於31的數字,每組數字的第一個數只要是2^n即可滿足要求。
第一組:1、 3、 5 、7 、……
第二組:2、 3 、 6、 7、……
第三組:4、 5、 6、 7、12、 13……、
第四組:8、 9、 10、 11、 12、……
第五組:16、 17、 18、 ……
總之,按照二進制碼的位數,每一位對應一組即可。
