c 解数独(通用方法,适用于9×9 数独)

折腾了一周时间,终于搞定9×9数独通用方法

思路:1.生成每行空位的值,也就是1-9中除去非0的数。

2.用行,列,宫判断每行中每个空位的最小取值范围后再重新生成每行。

3.随机提取生成的9行,判断每列之和是否等于45。

4.如9列之和都等于45则数独找到。

刚试了一下,网上的9*9数独都可用此程序解出。

 

c81ffa7dd951446dab2f104bfd79f551.png

 

程序:


#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>

int main(void) {
	
	//判断len长的数组是否有相同元素
	
	int pd(int *i,int len) {           
         
		int n = 0;
		for (int a = 0; a < len; a++) {
			for (int b = a + 1; b <len ; b++) {
				if (i[a] == i[b]) {
					n = -1;
					goto aa;
				}
			}
			
		}
		n = 1;
		aa:
		return n;
	}
  	
	//9位int数组中每位非空元素的值与下标
	
	int cxf0(int *i,int len,int (*o)[2]){
		int n=0;
		for(int a=0;a<len;a++){
			if(i[a]!=0){
			    o[n][0]=a;
				o[n][1]=i[a];
				n++;
				
			}
		}
		return n;
	}
	
	
	//9位int 数组中所有空 元素取值范围
	int cxfw(int *i,int *o){
		
		int ls[]={1,2,3,4,5,6,7,8,9};
		for(int a=0;a<9;a++){
			if(i[a]!=0){
				ls[i[a]-1]=0;
			}
		}
		int n=0;
		for(int a=0;a<9;a++){
			if(ls[a]!=0){
				o[n]=ls[a];
				n++;
			}
		}
		return n;
	}
	
	
	//提取三个int 数组中相同的元素(也就是每位空元素的可能取值范围)
	
	int xt(int *i1,int *i2,int *i3,int len1,int len2,int len3,int *o){
		int n=0;
		int ls[9]={};
		for(int a=0;a<len1;a++){
			for(int b=0;b<len2;b++){
				if(i1[a]==i2[b]){
					ls[n]=i1[a];	
					n++;
				}
			}
		}
		int x=0;
		for(int a=0;a<n;a++){
			for(int b=0;b<len3;b++){
				if(ls[a]==i3[b]){
					o[x]=ls[a];	
					x++;
				}
			}
		}
		return x;
	}
	

	int s[9][9] = {
		{5, 3, 0,   0, 7, 0,   0, 0, 0},
		{6, 0, 0,   1, 9, 5,   0, 0, 0},
		{0, 9, 8,   0, 0, 0,   0, 6, 0},
		
		{8, 0, 0,   0, 6, 0,   0, 0, 3},
		{4, 0, 0,   8, 0, 3,   0, 0, 1},
		{7, 0, 0,   0, 2, 0,   0, 0, 6},
		
		{0, 6, 0,   0, 0, 0,   2, 8, 0},
		{0, 0, 0,   4, 1, 9,   0, 0, 5},
		{0, 0, 0,   0, 8, 0,   0, 7, 9}
	};
     
	int ls[9]={};
	//---------------------------------
    //每宫空元素的可能值
	int g0[9]={};
	memset(ls,0,36);
	ls[0]=s[0][0],ls[1]=s[0][1],ls[2]=s[0][2],ls[3]=s[1][0],ls[4]=s[1][1],ls[5]=s[1][2],ls[6]=s[2][0],ls[7]=s[2][1],ls[8]=s[2][2];
	int ng0=cxfw(ls,g0);
	
	int g1[9]={};
	memset(ls,0,36);
	ls[0]=s[0][3],ls[1]=s[0][4],ls[2]=s[0][5],ls[3]=s[1][3],ls[4]=s[1][4],ls[5]=s[1][5],ls[6]=s[2][3],ls[7]=s[2][4],ls[8]=s[2][5];
	int ng1=cxfw(ls,g1);
	
	int g2[9]={};
	memset(ls,0,36);
	ls[0]=s[0][6],ls[1]=s[0][7],ls[2]=s[0][8],ls[3]=s[1][6],ls[4]=s[1][7],ls[5]=s[1][8],ls[6]=s[2][6],ls[7]=s[2][7],ls[8]=s[2][8];
	int ng2=cxfw(ls,g2);
	
	
	int g3[9]={};
	memset(ls,0,36);
	ls[0]=s[3][0],ls[1]=s[3][1],ls[2]=s[3][2],ls[3]=s[4][0],ls[4]=s[4][1],ls[5]=s[4][2],ls[6]=s[5][0],ls[7]=s[5][1],ls[8]=s[5][2];
	int ng3=cxfw(ls,g3);
	
	int g4[9]={};
	memset(ls,0,36);
	ls[0]=s[3][3],ls[1]=s[3][4],ls[2]=s[3][5],ls[3]=s[4][3],ls[4]=s[4][4],ls[5]=s[4][5],ls[6]=s[5][3],ls[7]=s[5][4],ls[8]=s[5][5];
	int ng4=cxfw(ls,g4);
	
	int g5[9]={};
	memset(ls,0,36);
	ls[0]=s[3][6],ls[1]=s[3][7],ls[2]=s[3][8],ls[3]=s[4][6],ls[4]=s[4][7],ls[5]=s[4][8],ls[6]=s[5][6],ls[7]=s[5][7],ls[8]=s[5][8];
	int ng5=cxfw(ls,g5);
	
	int g6[9]={};
	memset(ls,0,36);
	ls[0]=s[6][0],ls[1]=s[6][1],ls[2]=s[6][2],ls[3]=s[7][0],ls[4]=s[7][1],ls[5]=s[7][2],ls[6]=s[8][0],ls[7]=s[8][1],ls[8]=s[8][2];
	int ng6=cxfw(ls,g6);
	
	int g7[9]={};
	memset(ls,0,36);
	ls[0]=s[6][3],ls[1]=s[6][4],ls[2]=s[6][5],ls[3]=s[7][3],ls[4]=s[7][4],ls[5]=s[7][5],ls[6]=s[8][3],ls[7]=s[8][4],ls[8]=s[8][5];
	int ng7=cxfw(ls,g7);
	
	int g8[9]={};
	memset(ls,0,36);
	ls[0]=s[6][6],ls[1]=s[6][7],ls[2]=s[6][8],ls[3]=s[7][6],ls[4]=s[7][7],ls[5]=s[7][8],ls[6]=s[8][6],ls[7]=s[8][7],ls[8]=s[8][8];
	int ng8=cxfw(ls,g8);
	

	int zg[9][9]={};
	memcpy(&(zg[0][0]),g0,36);
	memcpy(&(zg[1][0]),g1,36);
	memcpy(&(zg[2][0]),g2,36);
	memcpy(&(zg[3][0]),g3,36);
	memcpy(&(zg[4][0]),g4,36);
	memcpy(&(zg[5][0]),g5,36);
	memcpy(&(zg[6][0]),g6,36);
	memcpy(&(zg[7][0]),g7,36);
	memcpy(&(zg[8][0]),g8,36);
	
	int zng[9]={ng0,ng1,ng2,ng3,ng4,ng5,ng6,ng7,ng8};
	
	//--------------------------------------------------------
    //数独9行中每行的空元素的可能值
	
	int h0[9]={};             //第一行空位每位的可能值
	memcpy(ls,&(s[0][0]),36);
	int nh0=cxfw(ls,h0);        //空位个数
	
	int h1[9]={};             //第二行空位每位的可能值
    memset(ls,0,36);
	memcpy(ls,&(s[1][0]),36);
	int nh1=cxfw(ls,h1);        //空位个数
	
	int h2[9]={};             
	memset(ls,0,36);
	memcpy(ls,&(s[2][0]),36);
	int nh2=cxfw(ls,h2);        
   
	int h3[9]={};            
	memset(ls,0,36);
	memcpy(ls,&(s[3][0]),36);
	int nh3=cxfw(ls,h3);        
	
    int h4[9]={};            
	memset(ls,0,36);
	memcpy(ls,&(s[4][0]),36);
	int nh4=cxfw(ls,h4);
	
	int h5[9]={};            
	memset(ls,0,36);
	memcpy(ls,&(s[5][0]),36);
	int nh5=cxfw(ls,h5);
	
	
	int h6[9]={};            
	memset(ls,0,36);
	memcpy(ls,&(s[6][0]),36);
	int nh6=cxfw(ls,h6);
	
	int h7[9]={};            
	memset(ls,0,36);
	memcpy(ls,&(s[7][0]),36);
	int nh7=cxfw(ls,h7);
	
	int h8[9]={};            
	memset(ls,0,36);
	memcpy(ls,&(s[8][0]),36);
	int nh8=cxfw(ls,h8);
	
    int zh[9][9]={};
	memcpy(&(zh[0][0]),h0,36);
	memcpy(&(zh[1][0]),h1,36);
	memcpy(&(zh[2][0]),h2,36);
	memcpy(&(zh[3][0]),h3,36);
	memcpy(&(zh[4][0]),h4,36);
	memcpy(&(zh[5][0]),h5,36);
	memcpy(&(zh[6][0]),h6,36);
	memcpy(&(zh[7][0]),h7,36);
	memcpy(&(zh[8][0]),h8,36);
	
	int znh[9]={nh0,nh1,nh2,nh3,nh4,nh5,nh6,nh7,nh8};
	
   //每列空元素的可能值
   
	int s0[9]={};
	memset(ls,0,36);
	for(int a=0;a<9;a++){
		ls[a]=s[a][0];
	}
    int ns0=cxfw(ls,s0);
	
	int s1[9]={};
	memset(ls,0,36);
	for(int a=0;a<9;a++){
		ls[a]=s[a][1];
	}
	int ns1=cxfw(ls,s1);
	
	int s2[9]={};
	memset(ls,0,36);
	for(int a=0;a<9;a++){
		ls[a]=s[a][2];
	}
	int ns2=cxfw(ls,s2);
	
	int s3[9]={};
	memset(ls,0,36);
	for(int a=0;a<9;a++){
		ls[a]=s[a][3];
	}
	int ns3=cxfw(ls,s3);
	
	int s4[9]={};
	memset(ls,0,36);
	for(int a=0;a<9;a++){
		ls[a]=s[a][4];
	}
	int ns4=cxfw(ls,s4);
	
	int s5[9]={};
	memset(ls,0,36);
	for(int a=0;a<9;a++){
		ls[a]=s[a][5];
	}
	int ns5=cxfw(ls,s5);
	
	int s6[9]={};
	memset(ls,0,36);
	for(int a=0;a<9;a++){
		ls[a]=s[a][6];
	}
	int ns6=cxfw(ls,s6);
	
	int s7[9]={};
	memset(ls,0,36);
	for(int a=0;a<9;a++){
		ls[a]=s[a][7];
	}
	int ns7=cxfw(ls,s7);
	
	int s8[9]={};
	memset(ls,0,36);
	for(int a=0;a<9;a++){
		ls[a]=s[a][8];
	}
	int ns8=cxfw(ls,s8);
	
    int zs[9][9]={};
	memcpy(&(zs[0][0]),s0,36);
	memcpy(&(zs[1][0]),s1,36);
	memcpy(&(zs[2][0]),s2,36);
	memcpy(&(zs[3][0]),s3,36);
	memcpy(&(zs[4][0]),s4,36);
	memcpy(&(zs[5][0]),s5,36);
	memcpy(&(zs[6][0]),s6,36);
	memcpy(&(zs[7][0]),s7,36);
	memcpy(&(zs[8][0]),s8,36);
	
	int zns[9]={ns0,ns1,ns2,ns3,ns4,ns5,ns6,ns7,ns8};
	
//-------------------------------------------------

    struct SD{
		int f0;
		int xb;
		int len;
		int fw[9];	
	};
	
	typedef struct SD sd;
	
	sd ss[9][9]={};              //9×9 数独81位的可能范围最小取值(已行,列,宫三方判定)
	
	for(int a=0;a<9;a++){        // 循环9行
	
		for(int b=0;b<9;b++){    //循环9列
			if(s[a][b]!=0){        //非空位
				ss[a][b].f0=1;
				ss[a][b].xb=b;
				ss[a][b].len=1;
				ss[a][b].fw[0]=s[a][b];
				
				
			}                                //下面是处理空位
			if((s[a][b]==0)&&(a<3)&&(b<3)){     //宫0 9位中的空位
				ss[a][b].f0=0;
				ss[a][b].xb=b;
				
				int lsh[9]={};
				memcpy(lsh,&(zh[a][0]),36);
				int lshn=znh[a];
				int lss[9]={};
				memcpy(lss,&(zs[b][0]),36);
				int lssn=zns[b];
				
				
				int o[9]={};
				ss[a][b].len=xt(lsh,lss,g0,lshn,lssn,ng0,o);
			  
				memcpy(&(ss[a][b].fw[0]),o,ss[a][b].len*4);
					
			}
			if((s[a][b]==0)&&(a<3)&&(b<6)&&(b>=3)){    //宫1的9位中的空位
				ss[a][b].f0=0;
				ss[a][b].xb=b;
				
				int lsh[9]={};
				memcpy(lsh,&(zh[a][0]),36);
				int lshn=znh[a];
				int lss[9]={};
				memcpy(lss,&(zs[b][0]),36);
				int lssn=zns[b];
				
				int o[9]={};
				ss[a][b].len=xt(lsh,lss,g1,lshn,lssn,ng1,o);
				memcpy(&(ss[a][b].fw),o,ss[a][b].len*4);
				
				
			}
			if((s[a][b]==0)&&(a<3)&&(b>=6)){        //宫2的9位中的空位
				ss[a][b].f0=0;
				ss[a][b].xb=b;
				
				int lsh[9]={};
				memcpy(lsh,&(zh[a][0]),36);
				int lshn=znh[a];
				int lss[9]={};
				memcpy(lss,&(zs[b][0]),36);
				int lssn=zns[b];
				
				int o[9]={};
				ss[a][b].len=xt(lsh,lss,g2,lshn,lssn,ng2,o);
				memcpy(&(ss[a][b].fw),o,ss[a][b].len*4);	
					
			}
			if((s[a][b]==0)&&(a>=3)&&(a<6)&&(b<3)){        //宫3的9位中的空位--------------
				ss[a][b].f0=0;
				ss[a][b].xb=b;
				
				int lsh[9]={};
				memcpy(lsh,&(zh[a][0]),36);
				int lshn=znh[a];
				int lss[9]={};
				memcpy(lss,&(zs[b][0]),36);
				int lssn=zns[b];
				
				int o[9]={};
				ss[a][b].len=xt(lsh,lss,g3,lshn,lssn,ng3,o);
				memcpy(&(ss[a][b].fw),o,ss[a][b].len*4);	
				
			}
			if((s[a][b]==0)&&(a>=3)&&(a<6)&&(b>=3)&&(b<6)){        //宫4的9位中的空位
				ss[a][b].f0=0;
				ss[a][b].xb=b;
				
				int lsh[9]={};
				memcpy(lsh,&(zh[a][0]),36);
				int lshn=znh[a];
				int lss[9]={};
				memcpy(lss,&(zs[b][0]),36);
				int lssn=zns[b];
				
				int o[9]={};
				ss[a][b].len=xt(lsh,lss,g4,lshn,lssn,ng4,o);
				memcpy(&(ss[a][b].fw),o,ss[a][b].len*4);	
				
			}
			if((s[a][b]==0)&&(a>=3)&&(a<6)&&(b>=6)){        //宫5的9位中的空位
				ss[a][b].f0=0;
				ss[a][b].xb=b;
				
				int lsh[9]={};
				memcpy(lsh,&(zh[a][0]),36);
				int lshn=znh[a];
				int lss[9]={};
				memcpy(lss,&(zs[b][0]),36);
				int lssn=zns[b];
				
				int o[9]={};
				ss[a][b].len=xt(lsh,lss,g5,lshn,lssn,ng5,o);
				memcpy(&(ss[a][b].fw),o,ss[a][b].len*4);	
				
			}
			if((s[a][b]==0)&&(a>=6)&&(b<3)){        //宫6的9位中的空位
				ss[a][b].f0=0;
				ss[a][b].xb=b;
				
				int lsh[9]={};
				memcpy(lsh,&(zh[a][0]),36);
				int lshn=znh[a];
				int lss[9]={};
				memcpy(lss,&(zs[b][0]),36);
				int lssn=zns[b];
				
				int o[9]={};
				ss[a][b].len=xt(lsh,lss,g6,lshn,lssn,ng6,o);
				memcpy(&(ss[a][b].fw),o,ss[a][b].len*4);	
				
			}
			if((s[a][b]==0)&&(a>=6)&&(b>=3)&&(b<6)){        //宫7的9位中的空位
				ss[a][b].f0=0;
				ss[a][b].xb=b;
				
				int lsh[9]={};
				memcpy(lsh,&(zh[a][0]),36);
				int lshn=znh[a];
				int lss[9]={};
				memcpy(lss,&(zs[b][0]),36);
				int lssn=zns[b];
				
				int o[9]={};
				ss[a][b].len=xt(lsh,lss,g7,lshn,lssn,ng7,o);
				memcpy(&(ss[a][b].fw),o,ss[a][b].len*4);	
				
			}
			if((s[a][b]==0)&&(a>=6)&&(b>=6)){        //宫8的9位中的空位
				ss[a][b].f0=0;
				ss[a][b].xb=b;
				
				int lsh[9]={};
				memcpy(lsh,&(zh[a][0]),36);
				int lshn=znh[a];
				int lss[9]={};
				memcpy(lss,&(zs[b][0]),36);
				int lssn=zns[b];
				
				int o[9]={};
				ss[a][b].len=xt(lsh,lss,g8,lshn,lssn,ng8,o);
				memcpy(&(ss[a][b].fw),o,ss[a][b].len*4);	
				
			}
		}
	}
//-----数独每行的可能值-------------------------------------------------------------------------------------------
	int zo[9][100][9]={};        //9行,每行可能的范围最小的排列,第一个9代表9行序号 100代表每行最多有100种可能,最后的9代表每行的9位数
	int nn[9]={};
	
    for(int a=0;a<9;a++){          //9行循环

	int nx=0;

	for(int a0=0;a0<ss[a][0].len;a0++){      //每行的9列循环
		
		for(int a1=0;a1<ss[a][1].len;a1++){
		
			for(int a2=0;a2<ss[a][2].len;a2++){
					
				for(int a3=0;a3<ss[a][3].len;a3++){
				 
					for(int a4=0;a4<ss[a][4].len;a4++){
					
						for(int a5=0;a5<ss[a][5].len;a5++){
								
							for(int a6=0;a6<ss[a][6].len;a6++){
							
								for(int a7=0;a7<ss[a][7].len;a7++){
								
									for(int a8=0;a8<ss[a][8].len;a8++){
									   	
						            	int z[]={ss[a][0].fw[a0],ss[a][1].fw[a1],ss[a][2].fw[a2],ss[a][3].fw[a3],ss[a][4].fw[a4],ss[a][5].fw[a5],ss[a][6].fw[a6],ss[a][7].fw[a7],ss[a][8].fw[a8]};
								
							            if(pd(z,9)>0){
						                   
											memcpy(&(zo[a][nx][0]),z,36);
											nx++;
											
						            	}
									}
								}
							}
						}
					}
				}
			}
		
		}
	
	}
		nn[a]=nx;
	
	}
	
	
/*	   for(int b=0;b<9;b++){
	      printf("%d ;",zo[7][0][b]);
	   }
   
 */   
	int wzo[9][9]={};
    //int zo[9][100][9]={};
    for(int q0=0;q0<nn[0];q0++){
		for(int q1=0;q1<nn[1];q1++){
			for(int q2=0;q2<nn[2];q2++){
				for(int q3=0;q3<nn[3];q3++){
					for(int q4=0;q4<nn[4];q4++){
						for(int q5=0;q5<nn[5];q5++){
							for(int q6=0;q6<nn[6];q6++){
								for(int q7=0;q7<nn[7];q7++){
									for(int q8=0;q8<nn[8];q8++){
									    int s0[9],s1[9],s2[9],s3[9],s4[9],s5[9],s6[9],s7[9],s8[9];
										
											memcpy(s0,&(zo[0][q0][0]),36);
										    memcpy(s1,&(zo[1][q1][0]),36);
										    memcpy(s2,&(zo[2][q2][0]),36);
										    memcpy(s3,&(zo[3][q3][0]),36);
										     memcpy(s4,&(zo[4][q4][0]),36);
										    memcpy(s5,&(zo[5][q5][0]),36);
										    memcpy(s6,&(zo[6][q6][0]),36);
										     memcpy(s7,&(zo[7][q7][0]),36);
										     memcpy(s8,&(zo[8][q8][0]),36);
										   
										   if((    s0[0]+s1[0]+s2[0]+s3[0]+s4[0]+s5[0]+s6[0]+s7[0]+s8[0]==45)
											    &&(s0[1]+s1[1]+s2[1]+s3[1]+s4[1]+s5[1]+s6[1]+s7[1]+s8[1]==45)
										    	&&(s0[2]+s1[2]+s2[2]+s3[2]+s4[2]+s5[2]+s6[2]+s7[2]+s8[2]==45)
											    &&(s0[3]+s1[3]+s2[3]+s3[3]+s4[3]+s5[3]+s6[3]+s7[3]+s8[3]==45)
											    &&(s0[4]+s1[4]+s2[4]+s3[4]+s4[4]+s5[4]+s6[4]+s7[4]+s8[4]==45)
											    &&(s0[5]+s1[5]+s2[5]+s3[5]+s4[5]+s5[5]+s6[5]+s7[5]+s8[5]==45)
											    &&(s0[6]+s1[6]+s2[6]+s3[6]+s4[6]+s5[6]+s6[6]+s7[6]+s8[6]==45)
											    &&(s0[7]+s1[7]+s2[7]+s3[7]+s4[7]+s5[7]+s6[7]+s7[7]+s8[7]==45)
											    &&(s0[8]+s1[8]+s2[8]+s3[8]+s4[8]+s5[8]+s6[8]+s7[8]+s8[8]==45)
												   ){
											    memcpy(&(wzo[0][0]),s0,36);
											   memcpy(&(wzo[1][0]),s1,36);
											   memcpy(&(wzo[2][0]),s2,36);
											   memcpy(&(wzo[3][0]),s3,36);
											   memcpy(&(wzo[4][0]),s4,36);
											   memcpy(&(wzo[5][0]),s5,36);
											   memcpy(&(wzo[6][0]),s6,36);
											   memcpy(&(wzo[7][0]),s7,36);
											   memcpy(&(wzo[8][0]),s8,36);
										   }
										
										   
									}
								}
							}
						}
					}
				}
				
			}
		}
	}
	
    for(int a=0;a<9;a++){
		for(int b=0;b<9;b++){
			printf("%d ,",wzo[a][b]);
		}
		puts("");
	}  
	return 0;
	
}

 

 

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/531504.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

找不到vcruntime140.dll怎么办,vcruntime140.dll丢失的多种解决方法

在我们日常频繁地与电脑打交道、依赖其处理各种工作、学习乃至娱乐任务的过程中&#xff0c;偶尔会遭遇一些令人困扰的技术问题。其中一种颇为常见的情况便是&#xff0c;当您正全神贯注于某个重要应用的操作&#xff0c;或是满怀期待地试图启动一款新安装的游戏时&#xff0c;…

2万亿训练数据!Stable LM 2-12B加入开源队列

公*众*号&#xff1a;AI疯人院 4月9日&#xff0c;知名大型模型开源平台Stability.ai在其官网上发布了全新的类ChatGPT模型——Stable LM 2 12B。 据了解&#xff0c;Stable LM 2 12B模型拥有120亿个参数&#xff0c;其训练数据涵盖了英语、西班牙语、德语等7种语言的2万亿个…

C++修炼之路之string--标准库中的string

目录 前言 一&#xff1a;标准库的string类简介 1.string是basic_string的一份char类型的类模板 2.basic_string类模板的分类 3.string是表示字符串的字符串类 4.在使用string类时要添加头文件#include 二&#xff1a;string类的常用接口(只介绍常用的) 1.构造析构赋…

今日arXiv最热大模型论文:Dataverse,针对大模型的开源ETL工具,数据清洗不再难!

引言&#xff1a;大数据时代下的ETL挑战 随着大数据时代的到来&#xff0c;数据处理的规模和复杂性不断增加&#xff0c;尤其是在大语言模型&#xff08;LLMs&#xff09;的开发中&#xff0c;对海量数据的需求呈指数级增长。这种所谓的“规模化法则”表明&#xff0c;LLM的性…

ETLCloud结合kafka的数据集成

一、ETLCloud中实时数据集成的使用 在ETLCloud中数据集成有两种方式&#xff0c;一种是离线数据集成&#xff0c;另一种便是我们今天所要介绍的实时数据集成了&#xff0c;两者的区别从名字便可以得知&#xff0c;前者处理的数据是离线的没有时效性的&#xff0c;后者的数据是…

常见的解析漏洞总结

文件解析漏洞 文件解析漏洞主要由于网站管理员操作不当或者 Web 服务器自身的漏洞&#xff0c;导致一些特殊文件被 IIS、apache、nginx 或其他 Web服务器在某种情况下解释成脚本文件执行。 比如网站管理员配置不当&#xff0c;导致php2、phtml、ascx等等这些文件也被当成脚本文…

【VScode】同时编辑多处

【VScode】同时编辑多处 1. 多光标自定义批量编辑2. 选择多个&#xff0c;同时操作(批量选中局部匹配项)3. 取消选择4. 在不移动光标的情况下滚动屏幕5. 批量选中全局匹配项6.重点6.1 通过上下键选择多行6.2 同时选中所有行的末尾6.3 选中多列另一种方式6.4 通过正则的方式配置…

显示学习4(基于树莓派Pico) -- 游戏

来自&#xff1a;https://github.com/zelacerda/micropython 代码改造了一下&#xff0c;让它可以跑起来。 简单分析一下代码。外层是一个死循环&#xff0c;有一个状态机来对应不同的场景。 def loop():while True:if state 0: splash_screen()elif state 1: game_waiti…

《数学大世界》期刊点评_栏目设置_投稿指南

《数学大世界》期刊点评_栏目设置_投稿指南 《数学大世界》知网 5000字符3版 收录小中高数学 教研类文章 理论&#xff0b;课题实例 23.1-7月版面&#xff1b; 24年3-4月版面也可安排 主管单位&#xff1a;吉林出版集团股份有限公司 主办单位&#xff1a;北方妇女儿童出版…

Python-VBA函数之旅-bytearray函数

目录 1、bytearray函数&#xff1a; 1-1、Python&#xff1a; 1-2、VBA&#xff1a; 2、相关文章&#xff1a; 个人主页&#xff1a;非风V非雨-CSDN博客 bytearray函数在Python中提供了一种可变字节序列的表示方式&#xff0c;这在实际编程中有多种应用场景。常见的应用场…

基于springboot+vue+Mysql的职称评审管理系统

开发语言&#xff1a;Java框架&#xff1a;springbootJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;…

Web 前端性能优化之八:前端性能检测实践

五、前端性能检测实践 1、常用的检测工具 Lighthouse、Chrome开发者工具中与性能检测相关的一些工具面板、页面加载性能分析工具PageSpeed Insights、专业的性能检测工具WEBPAGETEST等 1、Chrome 任务管理器 通过Chrome任务管理器我们可以查看当前Chrome浏览器中&#xff0…

机器学习-08-关联规则和协同过滤

总结 本系列是机器学习课程的系列课程&#xff0c;主要介绍机器学习中关联规则和协同过滤。 参考 机器学习&#xff08;三&#xff09;&#xff1a;Apriori算法&#xff08;算法精讲&#xff09; Apriori 算法 理论 重点 MovieLens:一个常用的电影推荐系统领域的数据集 2…

苍穹外卖---文件上传-阿里OSS

一&#xff1a;开通阿里云对象存储服务oss,创建bucket&#xff0c;获得密钥 二&#xff1a;在程序中集成上传文件功能 1.连接阿里云OSS对象存储服务器 声明一个配置属性的文件用于传入连接的参数 package com.sky.properties;import lombok.Data; import org.springframewo…

three.js跟着教程实现VR效果(四)

参照教程&#xff1a;https://juejin.cn/post/6973865268426571784&#xff08;作者&#xff1a;大帅老猿&#xff09; 1.WebGD3D引擎 用three.js &#xff08;1&#xff09;使用立方体6面图 camera放到 立方体的中间 like “回” 让贴图向内翻转 &#xff08;2&#xff09;使…

每周一算法:树上差分

题目链接 闇の連鎖 题目描述 传说中的暗之连锁被人们称为Dark。 Dark是人类内心的黑暗的产物&#xff0c;古今中外的勇者们都试图打倒它。 经过研究&#xff0c;你发现Dark呈现无向图的结构&#xff0c;图中有 N N N个节点和两类边&#xff0c;一类边被称为主要边&#xf…

用Python编写GUI程序实现WebP文件批量转换为JPEG格式

在Python编程中&#xff0c;经常会遇到需要处理图片格式的情况。最近&#xff0c;我遇到了一个有趣的问题&#xff1a;如何通过编写一个GUI程序来实现将WebP格式的图片批量转换为JPEG格式&#xff1f;在这篇博客中&#xff0c;我将分享我使用Python、wxPython模块和Pillow库实现…

打开Visual Studio后出现Visual Assist报错弹窗

安装了新的VA插件后发现无论如何清理打开VS都会报这个旧版VA报错弹窗&#xff0c;修复VS、重装VA都解决不了 后来进到VS安装目录&#xff0c;删掉一个可疑文件后弹窗再也不出现了

光伏电站运维管理平台功能分析

光伏电站的建设发展&#xff0c;不仅可以满足人们日益增长的用电需求&#xff0c;同时对于减少能源资源消耗也有着十分重要的作用。但是光伏电站因为区域跨度大&#xff0c;分布广泛等原因在建设发展中导致了人员管理困难、运维工作落实不到等问题&#xff0c;直接影响光伏电站…

【随笔】Git 高级篇 -- 相对引用1 main^(十二)

&#x1f48c; 所属专栏&#xff1a;【Git】 &#x1f600; 作  者&#xff1a;我是夜阑的狗&#x1f436; &#x1f680; 个人简介&#xff1a;一个正在努力学技术的CV工程师&#xff0c;专注基础和实战分享 &#xff0c;欢迎咨询&#xff01; &#x1f496; 欢迎大…