用我的代码执行后,输出为 2 行: 33035 40381 44096 40374 48872 38659 44165 53155 你能说说为什么要写成1行吗? |
谢谢fcode,下面是从我的附件中摘取的一组应该写在一起的数据,他们在number文件中的形式是 33035 40381 33035 44096 38659 44165 40374 40381 40381 48872 44165 53155 48872 53155 48872 54478 48872 56608 53155 60902 54478 56608 54478 60902 每一组数据中都有一个数据与另外至少一组数据中的一个数据相同,则把这些数据写在一起,输出后的形式为 33035 38659 40374 40381 44096 44165 48872 53155 54478 56608 60902 谢谢。 |
你最好是结合实例来说明你的需求。 列举几个数字,告诉我排列后应该是什么样子? |
fcode你好,运行你的程序后,感觉没有判断完全,可能是我没有把问题描述清楚,在输入文件中,如果a 和b是一对,b和c是一对, c和d是一对, a和c是一对, b和d是一对,以此类推,则在输出时把这些数据都归在一起写在一行。谢谢,祝春节快乐! |
谢谢fcode的帮助。 |
[Fortran] 纯文本查看 复制代码 Program www_fcode_cn Implicit None Integer , parameter :: N = 15749!// 行 Integer , parameter :: N_rows = N !// 行 Integer :: idata( 2 , N ) , idata_row( 2 , N ) Integer :: currRow , i , j , k Logical :: b( 2 ) currRow = 0 Open( 12 , File = "Number.txt" ) Open( 13 , File = "Number1.txt" ) Do i = 1 , N Read( 12 , * ) idata( : , i ) j = 0 b = .false. Do j = 1 , i-1 b(1) = ( any( idata(1,i) == idata(:,j) ) ) b(2) = ( any( idata(2,i) == idata(:,j) ) ) if ( any(b) ) exit End Do if ( j > 0 .and. j <= i-1 ) then if( b(1) .and. .NOT.b(2) ) then idata_row( 1 , i ) = 0 idata_row( 2 , i ) = idata_row( 1 , j ) elseif( b(2) .and. .NOT.b(1) ) then idata_row( 2 , i ) = 0 idata_row( 1 , i ) = idata_row( 2 , j ) else idata_row( : , i ) = 0 end if else currRow = currRow + 1 idata_row( : , i ) = currRow end if End Do Do i = 1 , currRow Do j = 1 , N if ( idata_row(1,j) == i ) then write( 13 , '(g0,1x)' , advance='no' ) idata(1,j) end if if ( idata_row(2,j) == i ) then write( 13 , '(g0,1x)' , advance='no' ) idata(2,j) end if End Do write(13,*) End Do Close( 12 ) Close( 13 ) End Program www_fcode_cn |
谢谢VVT,按你说的,如果下面加一行 35555 22963,也要加在一起,输出结果的第三行就变为 22963 35901 35555.谢谢关注。 |
我打开看是正常的,不是红色的。不需要编辑。 有一个疑问: 如果出现一行,第一个数据是未出现过的,而第二个是出现过的。如何处理? 比如你的算例,下面加一行: 35555 22963 其中 22963 出现过,而 35555 未出现过。 |
捐赠本站|Archiver|关于我们 About Us|小黑屋|Fcode ( 京ICP备18005632-2号 )
GMT+8, 2024-11-23 22:20