编程朋友数
程序设计思路:
一、小朋友和苹果都具有多样属性(比如高度、编号、状态等,还可以扩展出姓名,重量等)。所以小朋友和苹果要定义成结构体。
二、人和苹果数量都是手动输入,因此数组大小不确定,要使用动态数组(不使用动态,就得得限制用户输入的大小)。
三、题目要求确保摘到的总数最多,从最矮的小朋友开始摘,因此小朋友的数组要进行排序。
四、递归函数实现摘苹果逻辑,每人在自己够到的范围中随机摘两个(不够就拿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、 ……
总之,按照二进制码的位数,每一位对应一组即可。
