C语言————有1020个西瓜,第一天卖一半多两个,以后每天卖剩下的一半多两个,下面的程序统计卖完西瓜所需的天数

思路:

①定义三个变量:x1为西瓜总数”,“x2为剩余的西瓜数”,“day为卖完西瓜所需的天数”。

②首先,思考循环的变量是西瓜的总数,它是控制西瓜卖完与否的唯一变量。

③其次,剩余西瓜的数量受到西瓜总数的影响,题中“每天都卖出去西瓜数量的一半多两个”,也就相当于剩余的西瓜数目是西瓜数目的一半少两个

#include<stdio.h>
void main()
{    int day=0,x1=1020,x2;
     while(x1>0)          //循环条件,西瓜总数一直保持大于零即可,括号内也可以用x1或者X1!=0
       {  x2=x1/2-2;      
          x1=x2;         //将剩余的天数重新赋值给x1,保持循环的量一直变化
          day++;}        //卖西瓜天数的累计
     printf("day is %d\n",day);
}    

  • 7
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 7
    评论
西瓜好坏的判断可以使用决策树算法,常见的决策树算法包括ID3、C4.5、CART等。以下是一个简单的基于CART算法的决策树示例,用于判断西瓜好坏: ```c #include <stdio.h> #define MAX_SAMPLES 10 // 训练数据 int x[MAX_SAMPLES][2] = { {0, 1}, {0, 1}, {1, 0}, {1, 1}, {1, 0}, {0, 1}, {0, 0}, {1, 0}, {0, 0}, {1, 0}, }; int y[MAX_SAMPLES] = {0, 0, 1, 1, 1, 0, 1, 1, 1, 1}; // 决策树节点 struct Node { int feature; // 分裂特征 int threshold; // 分裂阈值 int label; // 叶子节点标签 struct Node *left; // 左子树 struct Node *right; // 右子树 }; // 计算基尼指数 double calc_gini(int *samples, int n_samples) { int count[2] = {0}; for (int i = 0; i < n_samples; i++) { count[samples[i]]++; } double gini = 1.0; for (int i = 0; i < 2; i++) { double p = (double)count[i] / n_samples; gini -= p * p; } return gini; } // 计算基尼指数增益 double calc_gini_gain(int *samples, int n_samples, int feature, int threshold, int *left_samples, int *right_samples) { int n_left = 0, n_right = 0; for (int i = 0; i < n_samples; i++) { if (x[samples[i]][feature] <= threshold) { left_samples[n_left++] = samples[i]; } else { right_samples[n_right++] = samples[i]; } } double gini_gain = calc_gini(samples, n_samples); gini_gain -= (double)n_left / n_samples * calc_gini(left_samples, n_left); gini_gain -= (double)n_right / n_samples * calc_gini(right_samples, n_right); return gini_gain; } // 训练决策树 struct Node* train_tree(int *samples, int n_samples) { // 如果样本全属于同一类别,则直接返回叶子节点 int label = y[samples[0]]; int is_pure = 1; for (int i = 1; i < n_samples; i++) { if (y[samples[i]] != label) { is_pure = 0; break; } } if (is_pure) { struct Node *leaf = (struct Node*)malloc(sizeof(struct Node)); leaf->feature = -1; leaf->threshold = -1; leaf->label = label; leaf->left = NULL; leaf->right = NULL; return leaf; } // 选择最优分裂特征和阈值 int best_feature = 0, best_threshold = 0; double best_gini_gain = 0.0; int left_samples[MAX_SAMPLES], right_samples[MAX_SAMPLES]; for (int i = 0; i < 2; i++) { for (int j = 0; j < n_samples; j++) { int threshold = x[samples[j]][i]; double gini_gain = calc_gini_gain(samples, n_samples, i, threshold, left_samples, right_samples); if (gini_gain > best_gini_gain) { best_feature = i; best_threshold = threshold; best_gini_gain = gini_gain; } } } // 分裂样本并递归建树 struct Node *node = (struct Node*)malloc(sizeof(struct Node)); node->feature = best_feature; node->threshold = best_threshold; node->label = -1; node->left = train_tree(left_samples, n_samples * best_threshold / 10); node->right = train_tree(right_samples, n_samples * (10 - best_threshold) / 10); return node; } // 预测新样本 int predict(struct Node *root, int *sample) { while (root->label == -1) { if (sample[root->feature] <= root->threshold) { root = root->left; } else { root = root->right; } } return root->label; } int main() { // 训练决策树 int samples[MAX_SAMPLES]; for (int i = 0; i < MAX_SAMPLES; i++) { samples[i] = i; } struct Node *root = train_tree(samples, MAX_SAMPLES); // 预测新样本 int sample[2]; printf("请输入西瓜的色泽(0-青绿,1-乌黑,2-浅白): "); scanf("%d", &sample[0]); printf("请输入西瓜的根蒂(0-蜷缩,1-稍蜷,2-硬挺): "); scanf("%d", &sample[1]); int label = predict(root, sample); if (label == 0) { printf("这是个好西瓜!\n"); } else { printf("这是个坏西瓜!\n"); } return 0; } ``` 在上述代码中,我们使用CART算法训练了一个决策树,并用于判断新的西瓜好坏。其中,训练数据包括10个样本,每个样本有两个特征:色泽和根蒂,标签为0表示好西瓜,标签为1表示坏西瓜。在预测新样本时,要输入西瓜的色泽和根蒂信息,程序会输出预测结果。
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

想吃荔枝_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值