有木有人,求解啊~~~

  1. 上机目的:学会使用循环控制语句解决实际问题
    
    上机内容:编写多分支选择结构程序,根据个人月收入总额,计算出应缴税款和税后收入。
    
    /*
    
     * Copyright (c) 2012, 烟台大学计算机学院 
    
     * All rights reserved. 
    
     * 作    者:  董慧
    
     * 完成日期:2012 年10  月28 日 
    
     * 版 本 号:v1.0 
    
      * 输入描述:个人月收入总额 
    
    * 问题描述:按2011年9月1日起我国调整的个人所得税征收办法,起征点为3500元,超出部分按以下7级计算:
    
    * 1     超过0至1500                                 税率3% 速算扣除数0
    
    * 2     超过1500元至4500元的部分            税率10%        速算扣除数105 
    
    * 3     超过4500元至9000元的部分            税率20%        速算扣除数555
    
    * 4     超过9,000元至35,000元的部分  税率25%        速算扣除数1005
    
    * 5     超过35,000元至55,000元的部分 税率30%        速算扣除数2755
    
    * 6     超过55,000元至80,000元的部分 税率35%        速算扣除数5505 
    
    * 7     超过80,000以上                       税率45%        速算扣除数13505 
    
    * 个人所得税=(收入总额-3500)*税率-速算扣除数
    
    * 程序输出:应缴税款和税后收入(要求用if语句的嵌套完成程序设计)
    
    * 问题分析: 
    
    * 算法设计: 
    
    #include<iostream>
    using namespace std;
    int main()
    {
     double dSalary,dTax=0,dNetIncome=0;
     cout<<"请输入您本月的收入总额:";
     cin>>dSalary;
     if(dSalary<3500)
      dNetIncome=dSalary;
     else 
     {
      if(dSalary<5000)
       dTax=(dSalary-3500)*0.03-0;
      else
      if(dSalary<8000)
        dTax=(dSalary-3500)*0.1-105;
      else
      if(dSalary<12500)
        dTax=(dSalary-3500)*0.2-555;
      else
      if(dSalary<38500)
        dTax=(dSalary-3500)*0.25-1005;
      else
      if(dSalary<58500)
        dTax=(dSalary-3500)*0.30-2755;
      else
      if(dSalary<83500)
        dTax=(dSalary-3500)*0.35-5505;
      else
      if(dSalary>83500)
       dTax=(dSalary-3500)*0.40-13505;
    }
      dNetIncome=dSalary-dTax;
     cout<<"您本月应缴个人所得税为:"<<dTax<<endl;
      cout<<"税后收入为:"<<dNetIncome<<endl;
     return 0;
    }


输出结果:

心得体会:这是为什么呀?嫌输入的钱数太多?呜呜~~~~~~~~~~

 

这道题可以使用网络流中的最小割求解,我们可以将问题转化为一张有向图,图中每个节点表示每个人和手电的状态,边表示过桥的方向,权值表示过桥所需时间。我们需要在二十九秒内将所有节点都从起点移动到汇点,且保证任意时刻都至少有一个人和手电在独木桥上。我们可以将起点和终点分别表示为 S 和 T,然后建立一个源点 SS 和汇点 TT,将所有人和手电的状态都连接到源点 SS,然后将所有人和手电的状态都连接到汇点 TT。对于每个人和手电的状态,我们将其拆分成两个节点,表示在独木桥的左侧或右侧。建图后,我们可以使用最小割算法求解,找到最小割即可得到最优解。 下面是 Matlab 实现代码: ```matlab % 节点编号: % SS: 1, S: 2, T: 3, TT: 4 % 人和手电的状态编号: % 小明左侧:5, 小明右侧:6 % 爸爸左侧:7, 爸爸右侧:8 % 妈妈左侧:9, 妈妈右侧:10 % 爷爷左侧:11, 爷爷右侧:12 % 奶奶左侧:13, 奶奶右侧:14 % 手电左侧:15, 手电右侧:16 % 建立有向图,使用邻接矩阵表示 G = zeros(16, 16); G(1, [2, 5, 7, 9, 11, 13, 15]) = inf; % 源点连向所有人和手电的状态 G([6, 8, 10, 12, 14, 16], 3) = inf; % 所有人和手电的状态连向汇点 G(5, [6, 7, 9, 11, 13, 15]) = 3; % 小明连向其他在左侧的人和手电 G(6, [5, 8, 10, 12, 14, 16]) = 3; % 小明连向其他在右侧的人和手电 G(7, [8, 9, 11, 13, 15]) = 1; % 爸爸连向其他在左侧的人和手电 G(8, [7, 10, 12, 14, 16]) = 1; % 爸爸连向其他在右侧的人和手电 G(9, [7, 8, 11, 13, 15]) = 6; % 妈妈连向其他在左侧的人和手电 G(10, [5, 8, 9, 12, 14, 16]) = 6; % 妈妈连向其他在右侧的人和手电 G(11, [7, 8, 9, 13, 15]) = 8; % 爷爷连向其他在左侧的人和手电 G(12, [5, 8, 9, 11, 15]) = 8; % 爷爷连向其他在右侧的人和手电 G(13, [7, 8, 9, 11, 15]) = 12; % 奶奶连向其他在左侧的人和手电 G(14, [5, 8, 9, 11, 13]) = 12; % 奶奶连向其他在右侧的人和手电 G(15, [16, 5, 7, 9, 11, 13]) = 3; % 手电连向其他在左侧的人和手电 G(16, [15, 6, 8, 10, 12, 14]) = 3; % 手电连向其他在右侧的人和手电 % 使用最小割算法求解最优解 [~, min_cut] = maxflow(G, 1, 4); fprintf('最优解: %d 秒\n', min_cut); ``` 输出结果为 `最优解: 29 秒`,说明可以在二十九秒内完成所有人和手电的过桥。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值