13【C语言 & 趣味算法】分糖果 问题。(数组名作为函数形参,亦即:形参数组名作 指针变量)

简介: 13【C语言 & 趣味算法】分糖果 问题。(数组名作为函数形参,亦即:形参数组名作 指针变量)

一、Review



12【c语言&趣味算法】存钱问题(四层for循环,if判断)

11【C语言&趣味算法】个人所得税问题(结构体应用)︰结构体的声明、定义结构体类型的三种方法等

10(可回看)【C语言&趣味算法】数制转换(常见,二进制、八进制、十进制、十六进制之间任意转换)

09【C语言&趣味算法】再识:折半查找(二分查找)︰基本思想、程序流程图及完整代码、附:顺序查找

08【C语言&趣味算法】再识:冒泡排序(问题分析、算法设计与分析、程序流程图以及完整代码)

07【C语言&趣味算法】最佳存款方案(采用从后往前递推解决)

06【c语言&趣味算法】牛顿迭代法求方程根(可回看)

05【C语言&趣味算法】经典:兔子产子问题(即:Fibonacci数列)

04【C语言&趣味算法】“抓交通肇事犯"问题。算法改进:设置"标识变量”,有效减少循环次数。03【C语言&趣味算法】(值得品味的一道题)打鱼还是晒网?结构体的简单应用。函数的应用。判断闰年的应用。求指定日期距1990年1月1日的天数。

02【C语言&趣味算法】借书方案问题:小明有5本新书,要借给A、B、C三位小朋友,若每人每次只能借1本,则可以有多少种不同的借法?

01【C语言&趣味算法】百钱百鸡问题(问题简单,非初学者请忽略叭)。请注意算法的设计(程序的框架),程序流程图的绘制,算法的优化。


二、New problem: Sharing sweets(分糖果)



2.1 Description of the problem

8ad47ddc421d4c729822134ee7cd0f17.jpg


2.2Analysis of the problem

7ae25e243a6148aa80825913a6a921d3.jpg


2.3 Algorithm design

ab4091bc620e4b4db8edc60dcf8ddbba.jpg


2.4 Defining the framework of the process(确定程序框架)

7d302f36ac8b49ef81992d9bbf71426d.jpgcfb0bca8515948abbead4ec5e3e36208.jpg


2.5 Full code and output


//code by xiexu 
//趣味13:分糖果 问题  
#include<stdio.h>
void print(int s[]);
int judge(int c[]);
int j=0;
int main()
{
  int sweet[10]={10,2,8,22,16,4,10,6,14,20}; /*初始化数组数据*/
  int i,t[10],l;
  printf("child  1   2   3   4   5   6   7   8   9  10\n");
  printf("………………………………………………………………\n");
  printf("time\n");
  print(sweet);         /*输出每个人手中糖的块数*/
  while(judge(sweet))       /*若不满足要求则继续进行循环*/
  { 
    for(i=0;i<10;i++)     /*将每个人手中的糖分成一半*/
      if(sweet[i]%2==0)   /*若为偶数则直接分出一半*/
        t[i]=sweet[i]=sweet[i]/2;
      else          /*若为奇数则加1后再分出一半*/
        t[i]=sweet[i]=(sweet[i]+1)/2;
    for(l=0;l<9;l++)      /*将分出的一半糖给右(后)边的孩子*/
      sweet[l+1]=sweet[l+1]+t[l];
    sweet[0]+=t[9];
    print(sweet);       /*输出当前每个孩子中手中的糖果数*/
  }
}
int judge(int c[])
{
  int i;
  for(i=0;i<10;i++)       /*判断每个孩子手中的糖果数是否相同*/
    if(c[0]!=c[i]) return 1;  /*不相同返回1*/
  return 0;
}
/*输出数组中每个元素的值*/
void print(int s[])         
{
int k;
printf(" %2d ",j++);
for(k=0;k<10;k++) printf("%4d",s[k]);
printf("\n");
} 


The outpot:

可以知道,经过17次分糖后,每个小朋友手中都会有18块糖果~

dbcd860b8e094731ab47ef6732b2b223.jpg


2.6 Question expansion(问题拓展)。值得学习!~

dc5b97c505194a63b4763edb16cbecf3.jpg

相关文章
|
5月前
|
存储 C语言
`scanf`是C语言中用于按格式读取标准输入的函数
`scanf`是C语言中用于按格式读取标准输入的函数,通过格式字符串解析输入并存入指定变量。需注意输入格式严格匹配,并建议检查返回值以确保读取成功,提升程序健壮性。
1139 0
|
7月前
|
安全 C语言
C语言中的字符、字符串及内存操作函数详细讲解
通过这些函数的正确使用,可以有效管理字符串和内存操作,它们是C语言编程中不可或缺的工具。
373 15
|
12月前
|
人工智能 Java 程序员
一文彻底搞清楚C语言的函数
本文介绍C语言函数:函数是程序模块化的工具,由函数头和函数体组成,涵盖定义、调用、参数传递及声明等内容。值传递确保实参不受影响,函数声明增强代码可读性。君志所向,一往无前!
516 1
一文彻底搞清楚C语言的函数
|
12月前
|
存储 人工智能 程序员
一文彻底搞清楚C语言的数据类型和变量
本文介绍了数据类型(基本、构造、指针、空类型)、变量(使用、命名规则、作用域)和常量(字面、符号、枚举、表达式),帮助初学者理解编程基础概念。坚持学习,定能创造奇迹!
1982 1
一文彻底搞清楚C语言的数据类型和变量
|
存储 编译器 C语言
【C语言程序设计——函数】分数数列求和2(头歌实践教学平台习题)【合集】
函数首部:按照 C 语言语法,函数的定义首部表明这是一个自定义函数,函数名为fun,它接收一个整型参数n,用于指定要求阶乘的那个数,并且函数的返回值类型为float(在实际中如果阶乘结果数值较大,用float可能会有精度损失,也可以考虑使用double等更合适的数据类型,这里以float为例)。例如:// 函数体代码将放在这里函数体内部变量定义:在函数体中,首先需要定义一些变量来辅助完成阶乘的计算。比如需要定义一个变量(通常为float或double类型,这里假设用float。
594 3
指针进阶(C语言终)
指针进阶(C语言终)
|
存储 C语言
C语言如何使用结构体和指针来操作动态分配的内存
在C语言中,通过定义结构体并使用指向该结构体的指针,可以对动态分配的内存进行操作。首先利用 `malloc` 或 `calloc` 分配内存,然后通过指针访问和修改结构体成员,最后用 `free` 释放内存,实现资源的有效管理。
1443 13
|
存储 人工智能 C语言
C语言程序设计核心详解 第八章 指针超详细讲解_指针变量_二维数组指针_指向字符串指针
本文详细讲解了C语言中的指针,包括指针变量的定义与引用、指向数组及字符串的指针变量等。首先介绍了指针变量的基本概念和定义格式,随后通过多个示例展示了如何使用指针变量来操作普通变量、数组和字符串。文章还深入探讨了指向函数的指针变量以及指针数组的概念,并解释了空指针的意义和使用场景。通过丰富的代码示例和图形化展示,帮助读者更好地理解和掌握C语言中的指针知识。
658 4
|
C语言
无头链表二级指针方式实现(C语言描述)
本文介绍了如何在C语言中使用二级指针实现无头链表,并提供了创建节点、插入、删除、查找、销毁链表等操作的函数实现,以及一个示例程序来演示这些操作。
225 0
|
编译器 C语言
【C语言初阶】指针篇—下
【C语言初阶】指针篇—下