根据方程组解,生成n个n元一次方程组

为了生成一个方程组,今天搓了一个

利用增广矩阵进行操作

#include <stdio.h>
#include<iostream> 
#include <stdlib.h>
#include <time.h>
#include <unistd.h> 
using namespace std; 

#define MAX_SIZE 200

int var_num=0;
 
int matrix[MAX_SIZE][MAX_SIZE];

int sum;

void print(){
	for(int i=0;i<sum;i++){
		for(int j=0;j<sum+1;j++){
			printf("%d,",matrix[i][j]);
		}
		printf("%d",matrix[i][16]);
		printf("\n");
	}
	printf("\n");
}

void mul(int i){
	srand(time(NULL)+ (unsigned) sleep(1));
    int multiplier= rand() % 8 + 1;
    for(int j=0;j<sum+1;j++){
    	matrix[i][j]=matrix[i][j]*multiplier;
	}
	print();
} 

void add(){
	int s=18;
	while(s--){
		srand(time(NULL));
    	int random1, random2;
    	do {
        	random1 = 1 + rand() % (sum-1); 
        	sleep(1); 
        	random2 = 1 + rand() % (sum-1);
    	} while (random1 == random2);
    	
    	for(int i=0;i<=16;i++){
    		matrix[random1][i]+= matrix[random2][i];
		}
		print();
	}
} 

void print_result(){
	bool first=true;
	for(int j=0;j<sum;j++){
		first=true;
		for(int i=1;i<sum;i++){
			if(matrix[j][i-1]!=0&&first){
				printf("v%d*%d",i,matrix[j][i-1]);
				first=false; 
			}
			else if(matrix[j][i-1]!=0)
				printf("+v%d*%d",i,matrix[j][i-1]); 
		} 
		if(matrix[j][sum-1]!=0){
			printf("+v16*%d=%d\n",matrix[j][sum-1],matrix[j][sum]);
		}else{
			printf("=%d\n",matrix[j][sum-1]);
		}
	}
} 

init(){
	printf(" ____________________\n");
	printf("< Equation set maker >\n");
	printf(" --------------------\n");
	printf("        \   ^__^\n");
	printf("         \  (oo)\_______\n");
	printf("            (__)\       )\/\  \n");
	printf("                ||----w |\n");
	printf("                ||     ||\n");
	printf("请输入你要求的方程组的解的个数:\n");
	cin >>sum;
	
	printf("请输入你要求的方程的解:\n");
	for(int i=0;i<sum;i++){
		scanf("%d",&matrix[i][sum]);
		print();
	}
	for(int i=0;i<sum;i++){
		matrix[i][i]=1;
	}
	print();
}

int main(){
	init();
	printf("开始进行乘法操作,增广矩阵的每一行乘一个随机数\n"); 
	for(int i=0;i<=sum;i++){
		mul(i);
	}
	printf("乘法完毕\n\n"); 
	printf("对增广矩阵的任意两行相加,开始加法\n"); 
	add(); 
	printf("加法完毕,输出得到的方程组:\n");
	print_result();
	
}

Linux版本:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <unistd.h>
#include <stdbool.h>

#define MAX_SIZE 200

int var_num = 0;

int matrix[MAX_SIZE][MAX_SIZE];

int sum;

void print() {
    for (int i = 0; i < sum; i++) {
        for (int j = 0; j < sum + 1; j++) {
            printf("%d,", matrix[i][j]);
        }
        printf("%d", matrix[i][16]);
        printf("\n");
    }
    printf("\n");
}

void mul(int i) {
    srand(time(NULL) + (unsigned)sleep(1));
    int multiplier = rand() % 8 + 1;
    for (int j = 0; j < sum + 1; j++) {
        matrix[i][j] = matrix[i][j] * multiplier;
    }
    print();
}

void add() {
    int s = 18;
    while (s--) {
        srand(time(NULL));
        int random1, random2;
        do {
            random1 = 1 + rand() % (sum - 1);
            sleep(1);
            random2 = 1 + rand() % (sum - 1);
        } while (random1 == random2);

        for (int i = 0; i <= 16; i++) {
            matrix[random1][i] += matrix[random2][i];
        }
        print();
    }
}

void print_result() {
    bool first = true;
    for (int j = 0; j < sum; j++) {
        first = true;
        for (int i = 1; i < sum; i++) {
            if (matrix[j][i - 1] != 0 && first) {
                printf("v%d*%d", i, matrix[j][i - 1]);
                first = false;
            } else if (matrix[j][i - 1] != 0)
                printf("+v%d*%d", i, matrix[j][i - 1]);
        }
        if (matrix[j][sum - 1] != 0) {
            printf("+v16*%d=%d\n", matrix[j][sum - 1], matrix[j][sum]);
        } else {
            printf("=%d\n", matrix[j][sum - 1]);
        }
    }
}

void init() {
    printf(" ____________________\n");
    printf("< Equation set maker >\n");
    printf(" --------------------\n");
    printf("        \\   ^__^\n");
    printf("         \\  (oo)\\_______\n");
    printf("             (__)\\       )\\/\\  \n");
    printf("                ||----w |\n");
    printf("                ||     ||\n");
    printf("请输入你要求的方程组的解的个数:\n");
    scanf("%d", &sum);

    printf("请输入你要求的方程的解:\n");
    for (int i = 0; i < sum; i++) {
        scanf("%d", &matrix[i][sum]);
        print();
    }
    for (int i = 0; i < sum; i++) {
        matrix[i][i] = 1;
    }
    print();
}

int main() {
    init();
    printf("开始进行乘法操作,增广矩阵的每一行乘一个随机数\n");
    for (int i = 0; i <= sum; i++) {
        mul(i);
    }
    printf("乘法完毕\n\n");
    printf("对增广矩阵的任意两行相加,开始加法\n");
    add();
    printf("加法完毕,输出得到的方程组:\n");
    print_result();

    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

烨鹰

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值