wcy的j组模拟(4)纠错集

01 部落人乘法(multi.in/.out/.cpp

【问题描述】

据说原始部落人以小石子作为计算工具,用减半和倍加运算就能求得任何两个整数的乘积(注意当然不能
用乘号 * 运算)。例如求 13 与 15 乘积的过程是:
13 15
6 30
3 60
1 120
规则是:左边不断除 2,写下商,舍去余数,右边不断加倍,直到左边变 1 为止。取结果的方法是:如果某
行左边是偶数,就划去整个这一行,右边剩下的数相加即可,如上式中舍去与 6 对应的 30,其结果就是:
13*15=15+60+120=195
请编程模拟他们的方法求输入两数的乘积,并以上式输出结果。
【输入说明】:两个整型数字 n,m
输出说明】:输出结果
输入】:
13 15
输出】:
13*15=15+60+120=195
数据范围
(2≤n,m≤40000)
【核心思想】
1、 基本模拟题,按题意的过程模拟
2、 Mod2 判定余数
3、 注意输出格式

【解析】

这题就是个简单的小模拟,没什么好说的

【核心代码】

#include<bits/stdc++.h>
using namespace std; 
int main(){ 
     int a,b,c,i; 
     cin>>a>>b; 
     c=a*b; 
     cout<<a<<'*'<<b<<"="; //保留格式
     while(a!=1)
     { 
         if(a%2) cout<<b<<'+'; //商为基数保留,偶数省略
         a/=2; 
         b*=2; 
     } 
     cout<<b<<"="<<c; 
     return 0; 
}

02 拼正方形(square.in/.out/.cpp

【问题描述】

现有若干根长度均为 1 厘米的小木棍,用 4 根可以拼成一个边长 1 厘米的正方形 ( 称为单位正方形 ) ,而用 7 根和 10 根小木棍则可以分别拼出两个和三个单位正方形
编程计算用这样的方法拼出 N 个单位正方形需要多少根木棍?要求用最少的根数,例如: 4 个单位正方形,可以用 12 根或 13 根小木棍,最少需 12 根。
输入 N         的值(N\leqslant 10000),输出拼出 N 个单位正方形所用的最少木棍数。
【输入说明 : 一行整型数字表示正方形的个数 N
输出说明 : 所用的最少木棍数
输入 :
4
输出 :
12
数据范围
(1 n 10^9)
  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
import matplotlib.pyplot as plt import numpy as np import pandas as pd data = pd.read_excel(r"G:\Data.xlsx") def dis(WC, data): WCX = (np.array(data['x']) * WC).sum() WCY = (np.array(data['y']) * WC).sum() x0 = WCX / WC.sum() y0 = WCY / WC.sum() d_j = ((np.array(data['x']) - x0) ** 2 + (np.array(data['y']) - y0) ** 2) ** 0.5 T = (WC * d_j).sum() print('重心法初始选点大致位置:({},{})'.format(x0, y0)) print('总费用T0:{}'.format(T)) # 迭代10次 plt.rcParams['font.sans-serif'] = [u'SimHei'] for i in range(10): WC_j = WC / d_j WCX_j = ((np.array(data['x']) * WC) / d_j).sum() WCY_j = ((np.array(data['y']) * WC) / d_j).sum() x = WCX_j / WC_j.sum() y = WCY_j / WC_j.sum() d_j = ((np.array(data['x']) - x) ** 2 + (np.array(data['y']) - y) ** 2) ** 0.5 T = (WC * d_j).sum() print('经{}次迭代后选址点位置:({},{})'.format(i + 1, x, y)) print('总费用T{}:{}'.format(i + 1, T)) # 画图,如果需要迭代次数多,建议只画第一次和最后一次 plt.figure(figsize=(8, 4)) plt.scatter(np.array(data['x']), np.array(data['y']), [300, 300, 300, 300, 300], c='green', marker='*', alpha=0.7, label='站点') plt.scatter(x, y, [270], c='red', marker='p', alpha=0.7, label='选址点') plt.xlabel('x坐标', fontsize=11) plt.ylabel('y坐标', fontsize=11) plt.grid(True) plt.title('重心法选址,第{}次结果示意图'.format(i + 1), fontsize=14) plt.show() if __name__ == '__main__': # 读取文件 data = pd.read_excel(r"C:\Users\pan15\Desktop\重心法\data.xlsx") # print(data) WC = np.array(data['W']) * np.array(data['C']) dis(WC, data)
06-01

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值