一、前言 24点游戏是一个常见游戏,出题者给出4个整数,要求答题者在指定时间内给出一个四则运算的表达式,恰好用上这这个整数各一次,计算结果为24,超出时间为输。 二、分析 用计算机来算这个题,搜索速度当然有很大优势,我编程喜欢考虑通用一点,不限制输入数量和结果数,甚至不限制运算符数量。这样组合数就很大,如果输入数比较多,则搜索时间会非常长。 我用两个方法来提高搜索速度:一、是大家都能考虑到的重复搜索问题,比如1,2,3和2,3,1所有的组合情况是相同的,我只搜索使用递增序的数组,则可以降低一个组合数的数量级别;二、使用动态规划中的备忘录方法,比如你计算出2和3所有可能的计算结果,则他们与4结合的时候,要用到,与1结合的时候,也要用到,使用备忘录,可以只计算一次,大大降低运算复杂度。 三、设计 整体设计:分别设计4个类:游戏、表达式、运算、分数,各司其责,结构清晰,易于扩展。
标签:
上传时间: 2014-01-13
上传用户:zhangyigenius
扩充课堂上讨论的表达式求值算法的功能,使得算法除了能进行加(+)、减(–)、乘(*)、整除(/) 运算之外,还能进行乘方(^)运算。 乘方运算符的优先级高于加、减、乘、整除运算符,低于括号;多个乘方运算符连续出现时,从右往左计算。 输入数据从文本文件“实习3数据.txt”中读取。该文件只有一行:一个用分号(;)结尾的表达式。 输出结果显示在屏幕上。 例如,若从文本文件中读取的数据是: 4+(2^2^3*4-120)*2 屏幕显示计算结果: 1812
上传时间: 2013-12-24
上传用户:dave520l
Servlets and JavaServer Pages is the first complete guide to building dynamic Java-based Web applications using the new JavaServer Pages 2.0 and Servlets 2.4. Servlets and JavaServer Pages (JSP) provide a robust solution to developing large, complex Web applications, including multiserver projects. In addition to built-in security, portability, and a Web server, they offer developers the freedom to work with any operating system that supports Javabe it Linux, Windows, OSX, or Solaris. This authoritative book begins by explaining how to set up a Servlet and JSP development environment, including a discussion of containers, Java support, and installing and configuring Tomcat. The authors then thoroughly explore servlets and JSP, including significant coverage of custom tag libraries, newly available filters, and popular servlet and JSP design patterns. Readers can then test-drive the knowledge gained by constructing a book-support Web site.
标签: JavaServer Java-based Servlets complete
上传时间: 2014-01-02
上传用户:zsjzc
实验源代码 //Warshall.cpp #include<stdio.h> void warshall(int k,int n) { int i , j, t; int temp[20][20]; for(int a=0;a<k;a++) { printf("请输入矩阵第%d 行元素:",a); for(int b=0;b<n;b++) { scanf ("%d",&temp[a][b]); } } for(i=0;i<k;i++){ for( j=0;j<k;j++){ if(temp[ j][i]==1) { for(t=0;t<n;t++) { temp[ j][t]=temp[i][t]||temp[ j][t]; } } } } printf("可传递闭包关系矩阵是:\n"); for(i=0;i<k;i++) { for( j=0;j<n;j++) { printf("%d", temp[i][ j]); } printf("\n"); } } void main() { printf("利用 Warshall 算法求二元关系的可传递闭包\n"); void warshall(int,int); int k , n; printf("请输入矩阵的行数 i: "); scanf("%d",&k); 四川大学实验报告 printf("请输入矩阵的列数 j: "); scanf("%d",&n); warshall(k,n); }
上传时间: 2016-06-27
上传用户:梁雪文以
用二分法计算求解下列方程的近似根: (1)f(x)= X5 -x -1 = 0, (2)e2x- 5x2 + 2 = 0。
上传时间: 2017-09-17
上传用户:nky1997
#include "iostream" using namespace std; class Matrix { private: double** A; //矩阵A double *b; //向量b public: int size; Matrix(int ); ~Matrix(); friend double* Dooli(Matrix& ); void Input(); void Disp(); }; Matrix::Matrix(int x) { size=x; //为向量b分配空间并初始化为0 b=new double [x]; for(int j=0;j<x;j++) b[j]=0; //为向量A分配空间并初始化为0 A=new double* [x]; for(int i=0;i<x;i++) A[i]=new double [x]; for(int m=0;m<x;m++) for(int n=0;n<x;n++) A[m][n]=0; } Matrix::~Matrix() { cout<<"正在析构中~~~~"<<endl; delete b; for(int i=0;i<size;i++) delete A[i]; delete A; } void Matrix::Disp() { for(int i=0;i<size;i++) { for(int j=0;j<size;j++) cout<<A[i][j]<<" "; cout<<endl; } } void Matrix::Input() { cout<<"请输入A:"<<endl; for(int i=0;i<size;i++) for(int j=0;j<size;j++){ cout<<"第"<<i+1<<"行"<<"第"<<j+1<<"列:"<<endl; cin>>A[i][j]; } cout<<"请输入b:"<<endl; for(int j=0;j<size;j++){ cout<<"第"<<j+1<<"个:"<<endl; cin>>b[j]; } } double* Dooli(Matrix& A) { double *Xn=new double [A.size]; Matrix L(A.size),U(A.size); //分别求得U,L的第一行与第一列 for(int i=0;i<A.size;i++) U.A[0][i]=A.A[0][i]; for(int j=1;j<A.size;j++) L.A[j][0]=A.A[j][0]/U.A[0][0]; //分别求得U,L的第r行,第r列 double temp1=0,temp2=0; for(int r=1;r<A.size;r++){ //U for(int i=r;i<A.size;i++){ for(int k=0;k<r-1;k++) temp1=temp1+L.A[r][k]*U.A[k][i]; U.A[r][i]=A.A[r][i]-temp1; } //L for(int i=r+1;i<A.size;i++){ for(int k=0;k<r-1;k++) temp2=temp2+L.A[i][k]*U.A[k][r]; L.A[i][r]=(A.A[i][r]-temp2)/U.A[r][r]; } } cout<<"计算U得:"<<endl; U.Disp(); cout<<"计算L的:"<<endl; L.Disp(); double *Y=new double [A.size]; Y[0]=A.b[0]; for(int i=1;i<A.size;i++ ){ double temp3=0; for(int k=0;k<i-1;k++) temp3=temp3+L.A[i][k]*Y[k]; Y[i]=A.b[i]-temp3; } Xn[A.size-1]=Y[A.size-1]/U.A[A.size-1][A.size-1]; for(int i=A.size-1;i>=0;i--){ double temp4=0; for(int k=i+1;k<A.size;k++) temp4=temp4+U.A[i][k]*Xn[k]; Xn[i]=(Y[i]-temp4)/U.A[i][i]; } return Xn; } int main() { Matrix B(4); B.Input(); double *X; X=Dooli(B); cout<<"~~~~解得:"<<endl; for(int i=0;i<B.size;i++) cout<<"X["<<i<<"]:"<<X[i]<<" "; cout<<endl<<"呵呵呵呵呵"; return 0; }
标签: 道理特分解法
上传时间: 2018-05-20
上传用户:Aa123456789
function [alpha,N,U]=youxianchafen2(r1,r2,up,under,num,deta) %[alpha,N,U]=youxianchafen2(a,r1,r2,up,under,num,deta) %该函数用有限差分法求解有两种介质的正方形区域的二维拉普拉斯方程的数值解 %函数返回迭代因子、迭代次数以及迭代完成后所求区域内网格节点处的值 %a为正方形求解区域的边长 %r1,r2分别表示两种介质的电导率 %up,under分别为上下边界值 %num表示将区域每边的网格剖分个数 %deta为迭代过程中所允许的相对误差限 n=num+1; %每边节点数 U(n,n)=0; %节点处数值矩阵 N=0; %迭代次数初值 alpha=2/(1+sin(pi/num));%超松弛迭代因子 k=r1/r2; %两介质电导率之比 U(1,1:n)=up; %求解区域上边界第一类边界条件 U(n,1:n)=under; %求解区域下边界第一类边界条件 U(2:num,1)=0;U(2:num,n)=0; for i=2:num U(i,2:num)=up-(up-under)/num*(i-1);%采用线性赋值对上下边界之间的节点赋迭代初值 end G=1; while G>0 %迭代条件:不满足相对误差限要求的节点数目G不为零 Un=U; %完成第n次迭代后所有节点处的值 G=0; %每完成一次迭代将不满足相对误差限要求的节点数目归零 for j=1:n for i=2:num U1=U(i,j); %第n次迭代时网格节点处的值 if j==1 %第n+1次迭代左边界第二类边界条件 U(i,j)=1/4*(2*U(i,j+1)+U(i-1,j)+U(i+1,j)); end if (j>1)&&(j U2=1/4*(U(i,j+1)+ U(i-1,j)+ U(i,j-1)+ U(i+1,j)); U(i,j)=U1+alpha*(U2-U1); %引入超松弛迭代因子后的网格节点处的值 end if i==n+1-j %第n+1次迭代两介质分界面(与网格对角线重合)第二类边界条件 U(i,j)=1/4*(2/(1+k)*(U(i,j+1)+U(i+1,j))+2*k/(1+k)*(U(i-1,j)+U(i,j-1))); end if j==n %第n+1次迭代右边界第二类边界条件 U(i,n)=1/4*(2*U(i,j-1)+U(i-1,j)+U(i+1,j)); end end end N=N+1 %显示迭代次数 Un1=U; %完成第n+1次迭代后所有节点处的值 err=abs((Un1-Un)./Un1);%第n+1次迭代与第n次迭代所有节点值的相对误差 err(1,1:n)=0; %上边界节点相对误差置零 err(n,1:n)=0; %下边界节点相对误差置零 G=sum(sum(err>deta))%显示每次迭代后不满足相对误差限要求的节点数目G end
标签: 有限差分
上传时间: 2018-07-13
上传用户:Kemin
IP2161是一款集成 7 种、用于 USB 输出端口的快充协议 IC,支持 7 种快充协议,包括 HVDCP QC3.0/QC2.0,FCP,AFC, SFCP,Apple 2.4A,BC1.2 以及三星 2.0A。 联系人:唐云先生(销售工程) 手机:13530452646(微信同号) 座机:0755-33653783 (直线) Q Q: 2944353362
上传时间: 2019-03-18
上传用户:lryang
Multisim仿真Multisim数电模电仿真实例源码100例,08数控本二 07.ms1010-10-4串联型直流稳压电路(2).ms724小时时钟(full)改.ms104位数字频率计.ms10559.ms10ADC电压显示1.ms12BIN2BCD电路.ms10FM解调.ms14FM解调.ms14 (Security copy)LED调光电路.pdsprjLM324简-易-电-子-琴-.ms10MC1496应用2.ms10Multisim 13.0仿真OP07CP两级放大.rarMUltisim 仿真作品集.zipOCL功率放大器电路.ms12OP07CP两级差动放大.ms13TL494 5V DC-DC.ms14UC3843升压控制电路.ms14UC3843芯片的DC-DC升压电路.ms14XUNKE936防静电焊台电路图.ms12zhongji电路.ms10三极管单按钮开关电路.ms10三极管线性稳压电路.ms10三相电源错相、断相保护电路.ms10乘法器.ms14交流电源防盗报警器.ms14交通信号灯_X.ms12交通灯(74LS163、74LS153、74LS74).ms13倒计时定时器 (1).ms10倒计时定时器.ms10倒计时定时器A【74LS161 74LS192】.ms10六路20秒声光显示计分抢答器.ms14减法.ms12四种波形发生器-741.ms14四路20秒声光显示计分抢答器.ms14四路带计分系统抢答器.rar四路流水灯.ms10四阶带通滤波.ms14四阶带通滤波.ms14 (Security copy)多色流水灯.ms10字发生+共阳数码管显示电路.ms10小信号放大电路.ms10差分比例电路+比例放大.ms14抢答器 (1).ms10抢答器.ms10数字时钟设计2.ms12数字电子钟仿真电路图.ms10数字电子钟仿真电路图2X.ms10数字钟X.ms10数字频率计(带量程).ms14数字频率计.ms10李萨如图.ms10模拟打兵乓球电路.ms10汽车尾灯控制电路2.ms10汽车尾灯显示控制电路.ms10汽车指示灯设计孙昱.docx混沌电路.ms10火灾报警.jpg电容测量电路.ms10电机正反转接触器应用.ms12电路2.ms10电路3.ms10电风扇.ms10简易洗衣机.ms10简易洗衣机2.ms10简易洗衣机2当.ms14篮球30秒计时器_X.ms13设计1.ms14设计2.ms14设计2.ms14 (Security copy)设计201405292100八路抢答器.ms10设计201405301500骰子模拟电路.ms10设计201406252300多色流水灯.ms10设计21.ms14设计3.ms14设计3.ms14 (Security copy)路灯节能控制.ms10输出电压可调的稳压源.ms14输出电压可调的稳压源.ms14 (Security copy)锁相环.ms7音量控制电路.ms10音频IRF610耳放.ms13音频功率放大器.ms14
标签: multisim
上传时间: 2021-12-12
上传用户:
FPGA片内FIFO读写测试Verilog逻辑源码Quartus工程文件+文档说明,使用 FPGA 内部的 FIFO 以及程序对该 FIFO 的数据读写操作。FPGA型号Cyclone4E系列中的EP4CE6F17C8,Quartus版本17.1。timescale 1ns / 1ps//////////////////////////////////////////////////////////////////////////////////module fifo_test( input clk, //50MHz时钟 input rst_n //复位信号,低电平有效 );//-----------------------------------------------------------localparam W_IDLE = 1;localparam W_FIFO = 2; localparam R_IDLE = 1;localparam R_FIFO = 2; reg[2:0] write_state;reg[2:0] next_write_state;reg[2:0] read_state;reg[2:0] next_read_state;reg[15:0] w_data; //FIFO写数据wire wr_en; //FIFO写使能wire rd_en; //FIFO读使能wire[15:0] r_data; //FIFO读数据wire full; //FIFO满信号 wire empty; //FIFO空信号 wire[8:0] rd_data_count; wire[8:0] wr_data_count; ///产生FIFO写入的数据always@(posedge clk or negedge rst_n)begin if(rst_n == 1'b0) write_state <= W_IDLE; else write_state <= next_write_state;endalways@(*)begin case(write_state) W_IDLE: if(empty == 1'b1) //FIFO空, 开始写FIFO next_write_state <= W_FIFO; else next_write_state <= W_IDLE; W_FIFO: if(full == 1'b1) //FIFO满 next_write_state <= W_IDLE; else next_write_state <= W_FIFO; default: next_write_state <= W_IDLE; endcaseendassign wr_en = (next_write_state == W_FIFO) ? 1'b1 : 1'b0; always@(posedge clk or negedge rst_n)begin if(rst_n == 1'b0) w_data <= 16'd0; else if (wr_en == 1'b1) w_data <= w_data + 1'b1; else w_data <= 16'd0; end///产生FIFO读的数据always@(posedge clk or negedge rst_n)begin if(rst_n == 1'b0) read_state <= R_IDLE; else read_state <= next_read_state;endalways@(*)begin case(read_state) R_IDLE: if(full == 1'b1) //FIFO满, 开始读FIFO next_read_state <= R_FIFO; else next_read_state <= R_IDLE; R_FIFO: if(empty == 1'b1)
上传时间: 2021-12-19
上传用户:20125101110