• 四则运算2单元测试


    规范后的四则运算2源程序:

    //四则运算程序2,从四则运算程序1的基础之上进行功能扩展
    //支持真分数运算,题目不重复,最多可支持十个运算数的带括号的运算式
    //多项四则运算式以及分数除法未予考虑余数,整数除法可以实现整除功能
    //2016,03,09
    
    #include<iostream>
    #include<fstream>
    #include<stdlib.h>
    #include<time.h>
    using namespace std;
    
    void main()
    {
    	srand((int)time(NULL));
    	//定义变量,记录用户的功能选择选项
    	int minfigure;
    	int maxfigure;
    	int count;
    	int chengchu;
    	int remainder_chengchu;
    	int negative_jiajian;
    	int printstyle;
    	//功能设置界面
    	cout << "*******************************************************************" << endl;
    	cout << "*                         四则运算生成器                          *" << endl;
    	cout << "*******************************************************************" << endl;
    	cout << "请按照系统提示设置生成器的功能:" << endl;
    	cout << "请输入参与四则运算的数值范围(格式如:1  100):" ;
    	cin >> minfigure >> maxfigure;
    	cout << "请输入生成四则运算式的数量:";
    	cin >> count;
    	cout << "请选择打印方式(1 屏幕输出  0 输出到文档):";
    	cin >> printstyle;
    	cout << "请设置系统的下列参数:" << endl;
    	cout << "    1 四则运算可否生成乘除法(1 是  0 否):";
    	cin >> chengchu;
    	if (1 == chengchu)
    	{
    		cout << "    2 除法是否可有余数(1 是  0 否):";
    		cin >> remainder_chengchu;
    	}
    	else
    	{
    		cout << "    2 加减法是否可以有负数(1 是  0 否):";
    		cin >> negative_jiajian;
    	}
    	cout << "功能设置完成!" << endl;
    	cout << "*******************************************************************" << endl;
    
    	int i, j;
    	int array_A[100];
    	int array_B[100];
    	int Operator[10];
    	char operatorFu[9];
    	int Operatorfu[9];
    	//生成用户指定数量的运算式的因子,为保证算式不重复,让生成的随机数都不重复
    	for (i = 0; i < count; i++)
    	{
    		array_A[i] = minfigure + rand() % maxfigure;
    		array_B[i] = minfigure + rand() % maxfigure;
    		for (j = 0; j < i; j++)
    		{
    			if (array_A[i] == array_A[j])
    			{
    				array_A[i] = minfigure + rand() % maxfigure;
    				j = 0;
    			}
    			if (array_B[i] == array_B[j])
    			{
    				array_B[i] = minfigure + rand() % maxfigure;
    				j = 0;
    			}
    		}
    	}
    	//根据用户的选择产生功能分支
    	if (1 == printstyle)   //运算式输出到屏幕上
    	{
    		if (1 == chengchu)  //是否可以生成除法
    		{
    			if (remainder_chengchu)  //除法可否有余数,分数除法谈论是否有余数无意义
    			{
    				cout << "*******************************************************************" << endl;
    				cout << "生成的四则运算式如下所示:" << endl;
    				cout << "*******************************************************************" << endl;
    				for (i = 0; i < count; i++)
    				{
    					if (array_A[i] > array_B[i])   //如果A[i]>B[i],则后续程序生成带括号的多项因子的四则运算
    					{
    						int m;
    						int operator_count = 3 + rand() % 8;   //随机生成多项因子的个数
    						int operatorfu_count = operator_count - 1;  //算符的个数比因子的个数少一
    						for (m = 0; m < operator_count; m++)
    						{
    							Operator[m] = minfigure + rand() % maxfigure;   //生成多项因子
    						}
    						for (m = 0; m < operatorfu_count; m++)
    						{
    							Operatorfu[m] = rand() % 4;                  //生成多项式的算符
    						}
    						for (m = 1; m < operator_count; m++)
    						{
    							if ((Operatorfu[m] / 2)>(Operatorfu[m - 1] / 2))  //乘除用3和4表示,加减用1和2表示,让其除以二得商0和1,可以区分出乘除为同一优先级,加减比乘除优先级低
    							{                                                 //若后一个运算符的优先级比前一个运算符的优先级高,则将前一个运算符对应的式子用括号括起来,确保了运算优先级低的加减运算在括号里面
    								switch (Operatorfu[m - 1])
    								{
    								case 0:
    									cout << "(" << Operator[m - 1] << " + " << Operator[m] << ")"; break;
    								case 1:
    									cout << "(" << Operator[m - 1] << " - " << Operator[m] << ")"; break;
    								case 2:
    									cout << "(" << Operator[m - 1] << " x " << Operator[m] << ")"; break;
    								case 3:
    									if (0 == Operator[m])
    									{
    										cout << "(" << Operator[m - 1] << " ÷ " << Operator[m] + 2 << ")";
    									}
    									break;   //若分子为零时,则让分子加2,即除以2
    								}
    								switch (Operatorfu[m])
    								{
    								case 0:
    									cout << " + "; m = m + 1; break;
    								case 1:
    									cout << " - "; m = m + 1; break;
    								case 2:
    									cout << " x "; m = m + 1; break;
    								case 3:
    									cout << " ÷ "; m = m + 1; break;
    								}
    							}
    							else
    							{
    								switch (Operatorfu[m - 1])
    								{
    								case 0:
    									cout << Operator[m - 1] << " + "; break;
    								case 1:
    									cout << Operator[m - 1] << " - "; break;
    								case 2:
    									cout << Operator[m - 1] << " x "; break;
    								case 3:
    									cout << Operator[m - 1] << " ÷ "; break;
    								}
    							}
    						}
    						cout << Operator[m - 1] << " = " << endl;         //输出最后一个多项式因子
    					}
    					else            //如果A[i]<B[i],则产生真分数运算式
    					{
    						int copyA = array_A[i];
    						int copyB = array_B[i];
    						int beichushuA = maxfigure;
    						int beichushuB = maxfigure;
    						int firstA = beichushuA% copyA;
    						int firstB = beichushuB% copyB;
    						while (firstA != 0)        //求A[i]和最大值的公约数,以便后面化简
    						{
    							int temp = copyA;
    							copyA = beichushuA%copyA;
    							beichushuA = temp;
    							firstA = beichushuA%copyA;
    						}
    						while (firstB != 0)
    						{
    							int temp = copyB;
    							copyB = beichushuB%copyB;
    							beichushuB = temp;
    							firstB = beichushuB%copyB;
    						}
    						int suanfu = rand() % 4;
    						switch (suanfu)
    						{
    						case 0:
    							cout << array_A[i] / copyA << "/" << maxfigure / copyA << " + " << array_B[i] / copyB << "/" << maxfigure / copyB << " = " << endl; break;
    						case 1:
    							cout << array_A[i] / copyA << "/" << maxfigure / copyA << " - " << array_B[i] / copyB << "/" << maxfigure / copyB << " = " << endl; break;
    						case 2:
    							cout << array_A[i] / copyA << "/" << maxfigure / copyA << " x " << array_B[i] / copyB << "/" << maxfigure / copyB << " = " << endl; break;
    						case 3:
    							cout << array_A[i] / copyA << "/" << maxfigure / copyA << " ÷ " << array_B[i] / copyB << "/" << maxfigure / copyB << " = " << endl; break;
    							//让A[i]和最大值都除以公约数便可以得到无法再约分的最大公约数
    						}
    					}
    				}
    			}
    			else
    			{
    				cout << "*******************************************************************" << endl;
    				cout << "生成的四则运算式如下所示:" << endl;
    				cout << "*******************************************************************" << endl;
    				for (i = 0; i < count; i++)
    				{
    					if (array_A[i] > array_B[i])
    					{
    						int m;
    						int operator_count = 3 + rand() % 8;
    						int operatorfu_count = operator_count - 1;
    						for (m = 0; m < operator_count; m++)
    						{
    							Operator[m] = minfigure + rand() % maxfigure;
    						}
    						for (m = 0; m < operatorfu_count; m++)
    						{
    							Operatorfu[m] = rand() % 4;
    						}
    						for (m = 1; m < operator_count; m++)
    						{
    							if ((Operatorfu[m] / 2)>(Operatorfu[m - 1] / 2))
    							{
    								switch (Operatorfu[m - 1])
    								{
    								case 0:
    									cout << "(" << Operator[m - 1] << " + " << Operator[m] << ")"; break;
    								case 1:
    									cout << "(" << Operator[m - 1] << " - " << Operator[m] << ")"; break;
    								case 2:
    									cout << "(" << Operator[m - 1] << " x " << Operator[m] << ")"; break;
    								case 3:
    									if (0 == Operator[m])
    									{
    										cout << "(" << Operator[m - 1] << " ÷ " << Operator[m] + 2 << ")";
    									}
    									break;
    								}
    								switch (Operatorfu[m])
    								{
    								case 0:
    									cout << " + "; m = m + 1; break;
    								case 1:
    									cout << " - "; m = m + 1; break;
    								case 2:
    									cout << " x "; m = m + 1; break;
    								case 3:
    									cout << " ÷ "; m = m + 1; break;
    								}
    							}
    							else
    							{
    								switch (Operatorfu[m - 1])
    								{
    								case 0:
    									cout << Operator[m - 1] << " + "; break;
    								case 1:
    									cout << Operator[m - 1] << " - "; break;
    								case 2:
    									cout << Operator[m - 1] << " x "; break;
    								case 3:
    									cout << Operator[m - 1] << " ÷ "; break;
    								}
    							}
    						}
    						cout << Operator[m - 1] << " = " << endl;
    					}
    					else
    					{
    						int copyB = array_B[i];
    						int first = array_B[i] % array_A[i];
    						while (first != 0)
    						{
    							int temp = array_A[i];
    							array_A[i] = array_B[i] % array_A[i];
    							array_B[i] = temp;
    							first = array_B[i] % array_A[i];
    						}
    						int suanfu = rand() % 4;
    						switch (suanfu)
    						{
    						case 0:
    							cout << array_A[i] << " + " << array_B[i] << "=" << endl; break;
    						case 1:
    							cout << array_A[i] << " - " << array_B[i] << "=" << endl; break;
    						case 2:
    							cout << array_A[i] << " x " << array_B[i] << "=" << endl; break;
    						case 3:
    							cout << copyB << " ÷ " << array_A[i] << " = " << endl; break;
    						}
    					}
    				}
    			}
    		}
    		else   //不允许生成乘除法,则只有加减法
    		{
    			if ((minfigure < 0) && (0 == negative_jiajian))  //若加减法不允许出现负数,则应该重新设定数值的范围,让最小值大于零,保证生成的随机数都是大于零的
    			{
    				cout << "请重新设置数值范围,最小值应大于零以保证加法无负数!" << endl;
    				cout << "请输入参与四则运算的数值范围(格式如:1  100):";
    				cin >> minfigure >> maxfigure;
    				for (i = 0; i < count; i++)     //重新生成的随机数仍是不重复的
    				{
    					array_A[i] = minfigure + rand() % maxfigure;
    					array_B[i] = minfigure + rand() % maxfigure;
    					for (j = 0; j < i; j++)
    					{
    						if (array_A[i] == array_A[j])
    						{
    							array_A[i] = minfigure + rand() % maxfigure;
    							j = 0;
    						}
    						if (array_B[i] == array_B[j])
    						{
    							array_B[i] = minfigure + rand() % maxfigure;
    							j = 0;
    						}
    					}
    				}
    			}
    			for (i = 0; i < count; i++)
    			{
    				if (array_A[i]>array_B[i])
    				{
    					int suanfu = rand() % 2;
    					switch (suanfu)
    					{
    					case 0:
    						cout << array_A[i] << " + " << array_B[i] << "=" << endl; break;
    					case 1:
    						cout << array_A[i] << " - " << array_B[i] << "=" << endl; break;
    					}
    				}
    				else
    				{
    					int copyA = array_A[i];
    					int copyB = array_B[i];
    					int beichushuA = maxfigure;
    					int beichushuB = maxfigure;
    					int firstA = beichushuA% copyA;
    					int firstB = beichushuB% copyB;
    					while (firstA != 0)
    					{
    						int temp = copyA;
    						copyA = beichushuA%copyA;
    						beichushuA = temp;
    						firstA = beichushuA%copyA;
    					}
    					while (firstB != 0)
    					{
    						int temp = copyB;
    						copyB = beichushuB%copyB;
    						beichushuB = temp;
    						firstB = beichushuB%copyB;
    					}
    					int suanfu = rand() % 2;
    					switch (suanfu)
    					{
    					case 0:
    						cout << array_A[i] / copyA << "/" << maxfigure / copyA << " + " << array_B[i] / copyB << "/" << maxfigure / copyB << "=" << endl; break;
    					case 1:
    						cout << array_B[i] / copyB << "/" << maxfigure / copyB << " - " << array_A[i] / copyA << "/" << maxfigure / copyA << "=" << endl; break;
    					}
    				}
    			}
    		}
    	}
    	else  //将最后生成的四则运算式存到文件中,内部实现的功能与输出到屏幕一致,只是输出不一样
    	{
    		if (1 == chengchu)
    		{
    			if (remainder_chengchu)
    			{
    				ofstream fileout;  //定义输出文件流的对象
    				fileout.open("biaodashi.txt", ios::out);  //打开文件,该文件为指定路径,则存放在工程的当前目录下
    				fileout << "*******************************************************************" << endl;
    				fileout << "生成的四则运算式如下所示:" << endl;
    				fileout << "*******************************************************************" << endl;
    				for (i = 0; i < count; i++)
    				{
    					if (array_A[i] > array_B[i])
    					{
    						int m;
    						int operator_count = 3 + rand() % 8;
    						int operatorfu_count = operator_count - 1;
    						for (m = 0; m < operator_count; m++)
    						{
    							Operator[m] = minfigure + rand() % maxfigure;
    						}
    						for (m = 0; m < operatorfu_count; m++)
    						{
    							Operatorfu[m] = rand() % 4;
    						}
    						for (m = 1; m < operator_count; m++)
    						{
    							if ((Operatorfu[m] / 2)>(Operatorfu[m - 1] / 2))
    							{
    								switch (Operatorfu[m - 1])
    								{
    								case 0:
    									fileout << "(" << Operator[m - 1] << " + " << Operator[m] << ")"; break;
    								case 1:
    									fileout << "(" << Operator[m - 1] << " - " << Operator[m] << ")"; break;
    								case 2:
    									fileout << "(" << Operator[m - 1] << " x " << Operator[m] << ")"; break;
    								case 3:
    									if (0 == Operator[m])
    									{
    										fileout << "(" << Operator[m - 1] << " ÷ " << Operator[m] + 2 << ")";
    									}
    									break;
    								}
    								switch (Operatorfu[m])
    								{
    								case 0:
    									fileout << " + "; m = m + 1; break;
    								case 1:
    									fileout << " - "; m = m + 1; break;
    								case 2:
    									fileout << " x "; m = m + 1; break;
    								case 3:
    									fileout << " ÷ "; m = m + 1; break;
    								}
    							}
    							else
    							{
    								switch (Operatorfu[m - 1])
    								{
    								case 0:
    									fileout << Operator[m - 1] << " + "; break;
    								case 1:
    									fileout << Operator[m - 1] << " - "; break;
    								case 2:
    									fileout << Operator[m - 1] << " x "; break;
    								case 3:
    									fileout << Operator[m - 1] << " ÷ "; break;
    								}
    							}
    						}
    						fileout << Operator[m - 1] << " = " << endl;
    					}
    					else
    					{
    						int copyA = array_A[i];
    						int copyB = array_B[i];
    						int beichushuA = maxfigure;
    						int beichushuB = maxfigure;
    						int firstA = beichushuA% copyA;
    						int firstB = beichushuB% copyB;
    						while (firstA != 0)
    						{
    							int temp = copyA;
    							copyA = beichushuA%copyA;
    							beichushuA = temp;
    							firstA = beichushuA%copyA;
    						}
    						while (firstB != 0)
    						{
    							int temp = copyB;
    							copyB = beichushuB%copyB;
    							beichushuB = temp;
    							firstB = beichushuB%copyB;
    						}
    						int suanfu = rand() % 4;
    						switch (suanfu)
    						{
    						case 0:
    							fileout << array_A[i] / copyA << "/" << maxfigure / copyA << " + " << array_B[i] / copyB << "/" << maxfigure / copyB << " = " << endl; break;
    						case 1:
    							fileout << array_A[i] / copyA << "/" << maxfigure / copyA << " - " << array_B[i] / copyB << "/" << maxfigure / copyB << " = " << endl; break;
    						case 2:
    							fileout << array_A[i] / copyA << "/" << maxfigure / copyA << " x " << array_B[i] / copyB << "/" << maxfigure / copyB << " = " << endl; break;
    						case 3:
    							fileout << array_A[i] / copyA << "/" << maxfigure / copyA << " ÷ " << array_B[i] / copyB << "/" << maxfigure / copyB << " = " << endl; break;
    						}
    					}
    				}
    				fileout.close();   //关闭文件,断开与文件连接
    			}
    			else
    			{
    				ofstream fileout;
    				fileout.open("biaodashi.txt", ios::out);
    				fileout << "*******************************************************************" << endl;
    				fileout << "生成的四则运算式如下所示:" << endl;
    				fileout << "*******************************************************************" << endl;
    				for (i = 0; i < count; i++)
    				{
    					if (array_A[i] > array_B[i])
    					{
    						int m;
    						int operator_count = 3 + rand() % 8;
    						int operatorfu_count = operator_count - 1;
    						for (m = 0; m < operator_count; m++)
    						{
    							Operator[m] = minfigure + rand() % maxfigure;
    						}
    						for (m = 0; m < operatorfu_count; m++)
    						{
    							Operatorfu[m] = rand() % 4;
    						}
    						for (m = 1; m < operator_count; m++)
    						{
    							if ((Operatorfu[m] / 2)>(Operatorfu[m - 1] / 2))
    							{
    								switch (Operatorfu[m - 1])
    								{
    								case 0:
    									fileout << "(" << Operator[m - 1] << " + " << Operator[m] << ")"; break;
    								case 1:
    									fileout << "(" << Operator[m - 1] << " - " << Operator[m] << ")"; break;
    								case 2:
    									fileout << "(" << Operator[m - 1] << " x " << Operator[m] << ")"; break;
    								case 3:
    									if (0 == Operator[m])
    									{
    										fileout << "(" << Operator[m - 1] << " ÷ " << Operator[m] + 2 << ")";
    									}
    									break;
    								}
    								switch (Operatorfu[m])
    								{
    								case 0:
    									fileout << " + "; m = m + 1; break;
    								case 1:
    									fileout << " - "; m = m + 1; break;
    								case 2:
    									fileout << " x "; m = m + 1; break;
    								case 3:
    									fileout << " ÷ "; m = m + 1; break;
    								}
    							}
    							else
    							{
    								switch (Operatorfu[m - 1])
    								{
    								case 0:
    									fileout << Operator[m - 1] << " + "; break;
    								case 1:
    									fileout << Operator[m - 1] << " - "; break;
    								case 2:
    									fileout << Operator[m - 1] << " x "; break;
    								case 3:
    									fileout << Operator[m - 1] << " ÷ "; break;
    								}
    							}
    						}
    						fileout << Operator[m - 1] << " = " << endl;
    					}
    					else
    					{
    						int copyB = array_B[i];
    						int first = array_B[i] % array_A[i];
    						while (first != 0)
    						{
    							int temp = array_A[i];
    							array_A[i] = array_B[i] % array_A[i];
    							array_B[i] = temp;
    							first = array_B[i] % array_A[i];
    						}
    						int suanfu = rand() % 4;
    						switch (suanfu)
    						{
    						case 0:
    							fileout << array_A[i] << " + " << array_B[i] << "=" << endl; break;
    						case 1:
    							fileout << array_A[i] << " - " << array_B[i] << "=" << endl; break;
    						case 2:
    							fileout << array_A[i] << " x " << array_B[i] << "=" << endl; break;
    						case 3:
    							fileout << copyB << " ÷ " << array_A[i] << " = " << endl; break;
    						}
    					}
    				}
    				fileout.close();
    			}
    		}
    		else
    		{
    			if ((minfigure < 0) && (0 == negative_jiajian))
    			{
    				cout << "请重新设置数值范围,最小值应大于零以保证加法无负数!" << endl;
    				cout << "请输入参与四则运算的数值范围(格式如:1  100):";
    				cin >> minfigure >> maxfigure;
    				for (i = 0; i < count; i++)
    				{
    					array_A[i] = minfigure + rand() % maxfigure;
    					array_B[i] = minfigure + rand() % maxfigure;
    					for (j = 0; j < i; j++)
    					{
    						if (array_A[i] == array_A[j])
    						{
    							array_A[i] = minfigure + rand() % maxfigure;
    							j = 0;
    						}
    						if (array_B[i] == array_B[j])
    						{
    							array_B[i] = minfigure + rand() % maxfigure;
    							j = 0;
    						}
    					}
    				}
    			}
    			ofstream fileout;
    			fileout.open("biaodashi.txt", ios::out);
    			for (i = 0; i < count; i++)
    			{
    				if (array_A[i]>array_B[i])
    				{
    					int suanfu = rand() % 2;
    					switch (suanfu)
    					{
    					case 0:
    						fileout << array_A[i] << " + " << array_B[i] << "=" << endl; break;
    					case 1:
    						fileout << array_A[i] << " - " << array_B[i] << "=" << endl; break;
    					}
    				}
    				else
    				{
    					int copyA = array_A[i];
    					int copyB = array_B[i];
    					int beichushuA = maxfigure;
    					int beichushuB = maxfigure;
    					int firstA = beichushuA% copyA;
    					int firstB = beichushuB% copyB;
    					while (firstA != 0)
    					{
    						int temp = copyA;
    						copyA = beichushuA%copyA;
    						beichushuA = temp;
    						firstA = beichushuA%copyA;
    					}
    					while (firstB != 0)
    					{
    						int temp = copyB;
    						copyB = beichushuB%copyB;
    						beichushuB = temp;
    						firstB = beichushuB%copyB;
    					}
    					int suanfu = rand() % 2;
    					switch (suanfu)
    					{
    					case 0:
    						fileout << array_A[i] / copyA << "/" << maxfigure / copyA << " + " << array_B[i] / copyB << "/" << maxfigure / copyB << "=" << endl; break;
    					case 1:
    						fileout << array_B[i] / copyB << "/" << maxfigure / copyB << " - " << array_A[i] / copyA << "/" << maxfigure / copyA << "=" << endl; break;
    					}
    				}
    			}
    			fileout.close();
    		}
    	}
    }
    

        Right-BICEP测试要求:

        1.Right-结果是否正确?

        2.B-是否所有的边界条件都是正确的?

        3.I-能查一下反向关联吗?

        4.C-能用其他手段交叉检查一下结果吗?

        5.E-你是否可以强制错误条件发生?

        6.P-是否满足性能要求?

        对四则运算2程序的测试用例如下:

        第一组测试用例:数值范围去1-465,输出数量为15,可生成除数,除数可以有余数

        最大值465为随便输入的,1到465都为整数,是常规的数据,主要用来测试程序能否得到正确的结果,测试截图如下:

       

        第二组测试用例:数值范围-200到164,输出数量12,可以生成乘除法,整数除法无余数

        测试程序是否可以生成负数,对于负数参与运算,看程序能否获得正确的结果,测试结果如下所示:

       

        第三组测试用例:数值范围0-1,输出数量10,可生成乘除法,有余数

        测试除数为零时是否与可以继续执行,测试结果如下所示:

       

        程序出现错误,无法执行,查找程序源代码得知,为保证题目数量不重复,随机产生的每一个数都是不同的,因此,数值的范围必须大于输出的数量程序才可以后续执行。

        修改后的运行结果为:

       

        第四组测试用例:数值范围0-3,输出数量1,可以生成乘除法,无余数

        主要为测试数据除数为零是是否能继续执行,测试结果如下所示:

       

        程序出现未知的错误,程序中若除数为零时,加入了相应的处理语句,但是不知为何还存在错误,该错误暂时还没有得到解决。

       第五组测试数据:数值范围-123-4897,输出数量50,屏幕输出,不可生成乘除法,加减无负数

        主要为测试程序生成负数时,如何保证加减法无负数,测试结果如下所示:

       

        第六组测试数据:数值范围-465 到-12,输出数量5 ,保存到文件,不可生成乘除法,加减有负数

        主要测试程序最后的结果能否保存到文件,测试结果如下所示:

       

       

  • 相关阅读:
    [NOIP模拟赛][贪心]奶牛晒衣服.
    BZOJ3750: [POI2015]Piecz
    BZOJ2348 [Baltic 2011]Plagiarism
    高精度乘法【高乘高
    codevs 1215 迷宫
    变量交换
    a+b问题与圆柱体表面积的计算
    算数表达式的练习
    [bzoj1070][SCOI2007]修车[ 网络流]
    [bzoj2502]清理雪道[上下界网络流]
  • 原文地址:https://www.cnblogs.com/hulidanxiang/p/5272400.html
Copyright © 2020-2023  润新知