【7.31】C++编写7254是一个不寻常的数,可以表示为7254 = 39 x 186,这个式子中1~9每个数字正好出现一次

题目题干

7254是一个不寻常的数,因为它可以表示为7254 = 39 x 186,这个式子中1~9每个数字正好出现一次,输出所有这样的不同的式子(乘数交换被认为是相同的式子)。结果小的先输出;结果相同的,较小的乘数较小的先输出。

解题思路

拿到题目的时候,我们其实可以意识到一个很明显的事实

1.这个式子只能在1~9之中进行选取,也就是说——

结果 = 数one x 数two
结果位数 + 数one位数 + 数two位数 = 9位
我们可以发现当结果为五位数时,数one和数two相乘不管怎么样也达不成。因为就算极端情况99 x 99也是小于100 x 100。也就是五位数。
同理当结果为3位数时,数one&two不管怎么样相乘都不会这么小。
所以结果只能为4位数,此时有两种情况一种是个位数x4位数,一种是3位数x2位数。

当我们意识到这点时我们就可以锁定,数值大概得位置,我们就可以用可以将他们比作成一个数组,给变量赋值,并且通过循环判断语句,来输出我们的结果。

代码部分

#include<iostream>
#include<algorithm>									//我们的全排列函数所在的库,在这里调用
using namespace std;
void compcout(int res,int multione,int multitwo)	//判断等式是否成立,输出结果的函数
{
    if (res==multione*multitwo)
    {
        cout<<res<<" = "<<multione<<" x "<<multitwo<<endl;
    }
}
void identity(int num[])
{
    while (next_permutation(num,num+9))						//全排列函数
    {
        int res;
        int x1,y1;									//设置两个变量是因为,相乘的两数位数不同
        int x2,y2;
        res=num[0]*1000+num[1]*100+num[2]*10+num[3];
        x1=num[4];
        y1=num[5]*1000+num[6]*100+num[7]*10+num[8];
        compcout(res,x1,y1);
        res=num[0]*1000+num[1]*100+num[2]*10+num[3];	
        x2=num[4]*10+num[5];
        y2=num[6]*100+num[7]*10+num[8];
        compcout(res,x2,y2);
    }
}
int main()
{
    int num[9]={1,2,3,4,5,6,7,8,9};				//题目中1-9之中进行取值
    identity(num);
    return 0;
}

所得结果

运行结果:

其中我们要注意输出时的空格哟

心得

1.需要自己仔细审题,不要将思维局限,获得所需条件。
2.多调用使用现成的库函数,可以提高我们的效率。
ps:因为是全排列的函数,我们其实可以发现他其实是按照字典排列,也就是由小及大,并且一一列举。并且全排列,一般是作用于数组,是从后寻找的。
3.在输出时,记得格式要正确。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是一个稍微复杂一些的光伏四季负荷的 Matlab 代码,供您参考: ```matlab % 复杂光伏四季负荷计算 % 定义常 P_max = 1000; % 光伏组件的最大输出功率, W k = 0.85; % 光伏组件的效率 H_max = [3.84, 4.58, 5.36, 4.94]; % 四季全日照总辐射量, W/m2 t = 0:0.1:24; % 时间段, h % 计算太阳高度角和方位角 lat = 39.9; % 纬度, ° lon = 116.3; % 经度, ° doy = ceil(t/24*365); % 年积日 [~, ~, ~, ~, ~, ~, s] = solar_position(lat, lon, 0, 0, doy, 0); % 太阳方位角和高度角, rad s = s/deg2rad(1); % 转换为角度制 s(s<0) = 0; % 计算大气透过率和直射辐射量 Rb = 1.35; % 大气透过率修 Io = 1367; % 太阳常, W/m2 Io = Io * (1 + 0.033*cos(2*pi/365*doy)); % 考虑地球公转 I0 = Io .* exp(-0.000125 * 101.3 * Rb ./ sin(deg2rad(s))); % 大气直射辐射, W/m2 % 计算坡面太阳辐射量 beta = 30; % 坡面倾角, ° gamma = 0; % 坡面方位角, ° tau_b = 0.03; % 组件透过率 tau_r = 0.1; % 反射率 I = I0 .* cos(deg2rad(s)) .* (0.75*(1-tau_b)*((1+cos(deg2rad(beta)))/2)+tau_b) .* (1-tau_r); % 坡面太阳辐射量, W/m2 % 计算光照强度 H = zeros(size(t)); H(6 <= t & t <= 18) = I(mod(ceil(t/24*4), 4)+1); % 计算输出功率 P = k * H * P_max; % 绘制图像 plot(t, P); xlabel(&#39;时间 (h)&#39;); ylabel(&#39;输出功率 (W)&#39;); title(&#39;光伏四季负荷&#39;); % 辅助函:计算太阳高度角和方位角 function [azimuth, elevation, h_r, h_s, alpha, delta, s] = solar_position(lat, lon, alt, temperature, doy, utc) % lat:纬度,° % lon:经度,° % alt:海拔高度,m % temperature:温度,°C % doy:年积日 % utc:世界时,h d2r = pi/180; % 将角度转换为弧度 % 计算儒略日 J2000 = datenum(2000, 1, 1, 12, 0, 0); J = datenum(0, 0, doy, utc, 0, 0) - J2000 + 2451545; % 计算平太阳时角 T = (J-2451545)/36525; L0 = mod(280.46646+36000.76983*T+0.0003032*T^2, 360); M = mod(357.52911+35999.05029*T-0.0001537*T^2, 360); C = (1.914602-0.004817*T-0.000014*T^2) .* sin(M*d2r) + (0.019993-0.000101*T) .* sin(2*M*d2r) + 0.000289 .* sin(3*M*d2r); lambda = mod(L0+C, 360); epsilon = 23.43929111 - 0.0130042*T - 1.7e-7*T^2 - 7.5e-9*T^3; alpha = atan2(cos(epsilon*d2r).*sin(lambda*d2r), cos(lambda*d2r)); delta = asin(sin(epsilon*d2r).*sin(lambda*d2r)); % 计算时角 h_r = mod((15*utc-180-alpha/deg2rad(15)-lon), 360); % 计算大气折射和修高度角 P = 1013.25 * exp(-0.00012*alt); T = temperature + 273.15; e0 = 0.61078 * exp(17.269*T./(T+238.3)); e = 0.66077 * P./(T+273.15); delta_e = (e0-e)/P; h_s = asin(sin(delta)*sin(lat*d2r) + cos(delta)*cos(h_r*d2r).*cos(lat*d2r)); h_s = h_s + 0.0025./tan(h_s+d2r*10.3./(h_s+d2r*5.11))./60/d2r; % 大气折射修 h_s = h_s - delta_e./tan(h_s+delta_e./(h_s+7.31*d2r))./60/d2r; % 大气折射修 % 计算太阳方位角和高度角 s = acos(sin(lat*d2r).*sin(h_s) ./ cos(lat*d2r)./cos(h_s)); azimuth = pi + atan2(sin(s), cos(s).*sin(h_r*d2r)./sin(h_s) - cos(h_r*d2r)./tan(lat*d2r)./tan(h_s)); elevation = pi/2 - h_s; end ``` 这个代码相比之前的代码,增加了更多的物理模型,包括大气透过率修、坡面太阳辐射量计算、太阳高度角和方位角计算等。为了实现这些功能,我们使用了一个辅助函 `solar_position`,用来计算太阳方位角和高度角。这些模型和参的具体含义,可以参考光伏领域的相关文献或教材。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值