舒尔特方格生成、优化

来上菜!

//提示:不开long long见祖宗
#include <bits/stdc++.h>
//#include<algorithm>
//#include<cstdio>
//#include<cstring>
//#include<cmath>
using namespace std;
//全局变量

//函数

int main()//主函数
{
	srand((unsigned int)time(NULL));
	bool a[11000];
	for(int i=0;i<=99;i++){
		a[i]=0;
	}
	int n,l=0;
	cin>>n;
	for(int i=1;i<=(n*n);i++){
		bool o=1;
		do{
			int b=rand()%((n*n));
			if(a[b+1]==0){
				printf("%-2d ",b+1);
				//cout<<b+1<<" ";
				a[b+1]=1;
				l++;
				o=0;
			}
		}while(o);

		if(l==n){
			cout<<endl;
			l=0;
		}
	}
	return 0;//清理垃圾
}

分析程序

这是一段使用C++编写的简单程序,其目的是在一个给定的范围内生成随机数,并确保每个数字只输出一次。让我们逐步分析这个程序,然后对其进行优化。

首先,程序包含了<bits/stdc++.h>头文件,这个头文件包含了C++标准库中的所有头文件。虽然这个头文件非常方便,但是通常在实践中,我们并不会这样做,因为这可能会导致编译器的负担加重,影响编译速度和程序性能。我们通常会选择需要哪些头文件,而不是一次包含所有头文件。

接下来,我们看到了一系列的using namespace std;这是一个命名空间,使得我们可以直接使用std命名空间中的函数和对象,而不需要在每次使用时都写出std::。

然后,我们看到了一个名为a的全局数组,它的大小为11000。这个数组被用来跟踪哪些数字已经被输出过。然后,我们看到一个循环,遍历数组的前100个元素,将它们的值设为0。

在主函数main()中,首先调用srand函数,将随机数生成器的种子设置为当前时间。然后,定义了一个名为n的整数变量,以及一个名为l的整数变量,并将其初始值设为0。

接下来,程序从标准输入中读取一个整数n。然后,程序进入一个循环,该循环的迭代次数为nn次。在每次循环中,程序生成一个介于0到nn-1之间的随机整数,并检查该数字是否已经被输出过。如果该数字还没有被输出过,那么就将其输出,并将对应的数组元素设为1,表示该数字已经被输出过。然后,将l加1,表示已经输出了一个数字。如果l等于n,那么就输出一个换行符,并将l重新设为0。

最后,程序返回0,表示程序正常结束。

优化程序

接下来,我们将对这个程序进行优化。

首先,我们可以使用更高效的方式来初始化数组a。在这个程序中,我们使用了for循环来遍历数组的前100个元素,并将它们的值设为0。但是,实际上我们可以直接在定义数组的时候就将其初始化为0。这样可以将初始化代码简化为如下形式:

bool a[11000] = {false};

这样就可以在初始化时将所有元素都设为false,而无需使用循环。

其次,我们可以使用更高效的方式来生成随机数。在这个程序中,我们使用了rand函数来生成随机数。但是,rand函数并不是一个高效的随机数生成器,因为它需要执行很多次的计算。我们可以使用更高效的随机数生成器来提高程序的性能。例如,我们可以使用下面的代码来生成随机数:

int b = (rand() * (n * n)) / (RAND_MAX + 1.0);

这样就可以在生成随机数时执行更少的计算,从而提高程序的性能。

然后,我们可以使用更高效的方式来检查数字是否已经被输出过。在这个程序中,我们使用了if语句来检查数组元素的值是否为false。但是,我们可以使用更高效的方式来检查数字是否已经被输出过。例如,我们可以使用下面的代码来检查数字是否已经被输出过:

if (!a[b]) {
    a[b] = true;
    // ...
}

这样就可以在检查数字是否已经被输出过时执行更少的计算,从而提高程序的性能。

最后,我们可以使用更高效的方式来输出数字。在这个程序中,我们使用了printf函数来输出数字。但是,我们可以使用更高效的方式来输出数字。例如,我们可以使用下面的代码来输出数字:

cout << (b + 1) << " ";

这样就可以在输出数字时执行更少的计算,从而提高程序的性能。

最终成果

综上所述,我们可以将原程序优化为如下形式:

#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;

int main() {
    srand(time(NULL));
    bool a[11000] = {false};
    int n, l = 0;
    cin >> n;
    for (int i = 1; i <= n * n; i++) {
        int b = (rand() * (n * n)) / (RAND_MAX + 1.0);
        if (!a[b]) {
            a[b] = true;
            cout << (b + 1) << " ";
            l++;
            if (l == n) {
                cout << endl;
                l = 0;
            }
        }
    }
    return 0;
    }
Python尔特方格是一种用于可视化数据的图形工具,它由Python编程语言和matplotlib库提供支持。尔特方格可以帮助我们更好地理解数据之间的关系和趋势。 尔特方格通常用于绘制二维数据,其中一个维度表示数据的横坐标,另一个维度表示数据的纵坐标。每个数据点在方格中的位置由其横纵坐标决定,而数据点的颜色或大小可以表示其对应的数值。 在Python中,我们可以使用matplotlib库来创建尔特方格。首先,我们需要导入matplotlib库,并创建一个图形对象。然后,我们可以使用scatter函数来绘制数据点,并通过设置参数来调整数据点的颜色、大小等属性。最后,我们可以使用xlabel、ylabel和title函数来添加坐标轴标签和标题。 下面是一个简单的示例代码,演示了如何使用Python绘制尔特方格: ```python import matplotlib.pyplot as plt # 创建图形对象 fig, ax = plt.subplots() # 数据 x = [1, 2, 3, 4, 5] y = [1, 4, 9, 16, 25] # 绘制尔特方格 ax.scatter(x, y, c='blue', s=50) # 添加坐标轴标签和标题 ax.set_xlabel('X') ax.set_ylabel('Y') ax.set_title('Schulte Grid') # 显示图形 plt.show() ``` 这段代码将创建一个尔特方格,其中x轴表示数据的横坐标,y轴表示数据的纵坐标。数据点的颜色为蓝色,大小为50。坐标轴标签分别为'X'和'Y',标题为'Schulte Grid'。 希望以上内容对您有所帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

江河湖海 

最近手头有点紧,感谢你给我鼓励

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值