中华大饭店 收视率:用C怎么编以下要求的程序?急!!悬赏+100!!!!

来源:百度文库 编辑:查人人中国名人网 时间:2024/04/30 14:33:04
题目在以下这个网址里:
http://free.1001yeah.net/haker/showbbs.asp?bd=20&id=188&totable=1

问题如下图:
[img]http://free.1001yeah.net/haker/upload/2006329194643-2.jpg[/img]
已知程序如下:

#include <stdio.h>
#define MAX 200
int a[MAX], b[MAX], cnt = 0 ;
int isprime(int m)
{
int i ;
for(i = 2 ; i <= m/2 ; i++)
if(m % i == 0) return 0 ;
return 1 ;
}
void jsVal()
{

}
void readDat()
{
int i ;
FILE *fp ;
fp = fopen("in.dat", "r") ;
for(i = 0 ; i < MAX ; i++) fscanf(fp, "%d", &a[i]) ;
fclose(fp) ;
}
void main()
{
int i ;
readDat() ;
jsVal() ;
printf("满足条件的数=%d\n", cnt) ;
for(i = 0 ; i < cnt ; i++) printf("%d ", b[i]) ;
printf("\n") ;
writeDat() ;
}
writeDat()
{
FILE *fp ;
int i ;
fp = fopen("out.dat", "w") ;
fprintf(fp, "%d\n", cnt) ;
for(i = 0 ; i < cnt ; i++) fprintf(fp, "%d\n", b[i]) ;
fclose(fp) ;
}

in.dat文件里的数据为:
6738 9058 2877 2946 8767 5024 2281 9068 5437 1846
1997 6820 6545 1494 4343 7781 1058 4520 1387 1493
9066 7524 1531 7711 1906 2686 2513 6201 5359 8245
2929 6924 8293 9805 6375 5080 6181 3575 7087 8761
7200 2624 9498 9880 3823 8946 5413 9064 5596 1149
7588 7186 6833 5311 2690 5494 2039 7996 8441 1808
9102 9861 9385 9892 5954 4488 9107 5990 3537 2484
1644 3708 2960 5293 1920 5481 4558 3576 4380 1886
6603 8275 4369 9848 2560 9851 7400 8174 2641 3487
9925 6332 8225 8593 1254 6981 8704 7712 3388 7728
7973 5746 8448 5569 2724 5460 8398 2438 9750 6722
5307 4449 9709 6781 9276 7683 6505 7093 3231 3897
4125 3525 2973 4627 8041 2035 5163 1619 4232 1046
2736 4285 9403 7722 8843 4142 2777 4951 3135 1249
5755 7569 4210 4595 2665 5012 5967 6323 5425 2042
1462 4492 4719 5224 4060 2168 3821 9971 8724 2884
8656 7718 8102 3071 7774 8970 8302 2033 2893 7888
8968 2311 2398 4395 3059 9809 2888 4152 7473 2420
7878 1979 6119 4144 6601 4173 5350 1578 7511 3241
7783 2362 4313 7807 2397 6770 6130 4430 2778 5983
(2006-3-30) 你们的都不行呀!我调试了一下!急呀!

上面的好快,我也写一个,也没调试,总之同上.
不过好不容易写出来,也发出来吧.

#include <stdio.h>
#define MAX 200
int a[MAX], b[MAX], cnt = 0 ;
int isprime(int m)
{
int i ;
for(i = 2 ; i <= m/2 ; i++)
if(m % i == 0) return 0 ;
return 1 ;
}
void jsVal()
{
int i;
int a1 , a2;
for(i = 0 ; i < MAX ; i++)
{
a1 = 0;
a2 = 0;
a1 = (a[i] % 100) / 10; // 十位数到个位数
a1 += ((a[i] % 10000) / 1000) * 10; // 千位数到十位数
a2 = (a[i] % 1000) / 100; // 百位数到个位数
a2 += (a[i] % 10) * 10; // 个位数到十位数
if( a1 >= 10 && a2 >= 10 && // 十位不为0
isprime(a1) && isprime(a2) ) // 都为素数
{
b[cnt++] = a[i];
}
}
int j,k,temp;
//排序
for( i = 1 ; i <= cnt ; i++ )
{
j = i - 1;
for( k = i ; k < count ; k++ )
{
if( b[j] < b[k] ) j = k;
}
k = i - 1;
if( j != k )
{
temp = b[k];
b[k] = b[j];
b[j] = temp;
}
}
}
void readDat()
{
int i ;
FILE *fp ;
fp = fopen("in.dat", "r") ;
for(i = 0 ; i < MAX ; i++) fscanf(fp, "%d", &a[i]) ;
fclose(fp) ;
}
void main()
{
int i ;
readDat() ;
jsVal() ;
printf("满足条件的数=%d\n", cnt) ;
for(i = 0 ; i < cnt ; i++) printf("%d ", b[i]) ;
printf("\n") ;
writeDat() ;
}
writeDat()
{
FILE *fp ;
int i ;
fp = fopen("out.dat", "w") ;
fprintf(fp, "%d\n", cnt) ;
for(i = 0 ; i < cnt ; i++) fprintf(fp, "%d\n", b[i]) ;
fclose(fp) ;
}

void jsVal()
{
int n1,n2,j,insPos,tmp;
cnt=0;
for (j=0;j<MAX;j++)
{
n1=(a[j]/1000)*10+(a[j]/10)%10;
n2=((a[j]/100)%10)*10+a[j]%10;
if (isprime(n1)&&isprime(n2)&&n1>9&&n2>9)
{

if (j==0)
{
b[0]=a[j];
cnt++;
}
else
{
insPos=0;
while(a[j]<b[insPos]){ insPos++;continue;}
for (tmp=cnt;tmp>insPos ;tmp-- )b[tmp]=b[tmp-1];
b[insPos]=a[j];
cnt++;
}
}
}
}

发上来以后没格式了,特别难看了~~
我没有调试,但是应该没问题的.
累了,写了半个小时~

void jsVal()
{
int n1,n2,j,insPos,tmp;
cnt=0;
for (j=0;j<MAX;j++)
{
n1=(a[j]/1000)*10+(a[j]/10)%10;
n2=((a[j]/100)%10)*10+a[j]%10;
if (isprime(n1)&&isprime(n2)&&n1>9&&n2>9)
{

if (j==0)
{
b[0]=a[j];
cnt++;
}
else
{
insPos=0;
while(a[j]<b[insPos]){ insPos++;continue;}
for (tmp=cnt;tmp>insPos ;tmp-- )b[tmp]=b[tmp-1];
b[insPos]=a[j];
cnt++;
}
}
}
}

发上来以后没格式了,特别难看了~~
我没有调试,但是应该没问题的.
累了,写了半个小时~
void jsVal()
{
int n1,n2,j,insPos,tmp;
cnt=0;
for (j=0;j<MAX;j++)
{
n1=(a[j]/1000)*10+(a[j]/10)%10;
n2=((a[j]/100)%10)*10+a[j]%10;
if (isprime(n1)&&isprime(n2)&&n1>9&&n2>9)
{

if (j==0)
{
b[0]=a[j];
cnt++;
}
else
{
insPos=0;
while(a[j]<b[insPos]){ insPos++;continue;}
for (tmp=cnt;tmp>insPos ;tmp-- )b[tmp]=b[tmp-1];
b[insPos]=a[j];
cnt++;
}
}
}
}

上面的好快,我也写一个,也没调试,总之同上.
不过好不容易写出来,也发出来吧.

#include <stdio.h>
#define MAX 200
int a[MAX], b[MAX], cnt = 0 ;
int isprime(int m)
{
int i ;
for(i = 2 ; i <= m/2 ; i++)
if(m % i == 0) return 0 ;
return 1 ;
}
void jsVal()
{
int i;
int a1 , a2;
for(i = 0 ; i < MAX ; i++)
{
a1 = 0;
a2 = 0;
a1 = (a[i] % 100) / 10; // 十位数到个位数
a1 += ((a[i] % 10000) / 1000) * 10; // 千位数到十位数
a2 = (a[i] % 1000) / 100; // 百位数到个位数
a2 += (a[i] % 10) * 10; // 个位数到十位数
if( a1 >= 10 && a2 >= 10 && // 十位不为0
isprime(a1) && isprime(a2) ) // 都为素数
{
b[cnt++] = a[i];
}
}
int j,k,temp;
//排序
for( i = 1 ; i <= cnt ; i++ )
{
j = i - 1;
for( k = i ; k < count ; k++ )
{
if( b[j] < b[k] ) j = k;
}
k = i - 1;
if( j != k )
{
temp = b[k];
b[k] = b[j];
b[j] = temp;
}
}
}
void readDat()
{
int i ;
FILE *fp ;
fp = fopen("in.dat", "r") ;
for(i = 0 ; i < MAX ; i++) fscanf(fp, "%d", &a[i]) ;
fclose(fp) ;
}
void main()
{
int i ;
readDat() ;
jsVal() ;
printf("满足条件的数=%d\n", cnt) ;
for(i = 0 ; i < cnt ; i++) printf("%d ", b[i]) ;
printf("\n") ;
writeDat() ;
}
writeDat()
{
FILE *fp ;
int i ;
fp = fopen("out.dat", "w") ;
fprintf(fp, "%d\n", cnt) ;
for(i = 0 ; i < cnt ; i++) fprintf(fp, "%d\n", b[i]) ;
fclose(fp) ;
}

发上来以后没格式了,特别难看了~~
我没有调试,但是应该没问题的.
累了,写了半个小时~

 
 
 
程序的正确输出结果是:

满足条件的数=10
9971 8398 7711 6375 4719 4173 2736 2398 2397 1997

下面的完整代码里有 jsVal( ) 的实现。你可以参考。

#include <stdio.h>
#define MAX  200
int a[MAX], b[MAX], cnt = 0 ;

int isprime(int m)
{
  int i ;
  for(i = 2 ; i <= m/2 ; i++)
   if(m % i == 0) return 0 ;
  return 1 ;
}

void jsVal()
{
  int i, j;

  for( i = 0; i < MAX; i++ ) {

    /* Produce the two 2-digit numbers. */
    int d1 = a[ i ] / 1000  * 10  + a[ i ] /  10  % 10,
        d2 = a[ i ] %   10  * 10  + a[ i ] / 100  % 10;
    
    /* Qualification. */
    if( isprime( d1 ) && isprime( d2 ) && d1 > 9 && d2 > 9 ) {
      
      /* Add to tail. */
      b[ cnt++ ] = a[ i ];

      /* Bubble-sort from tail toward head to achieve descending order. */
      for( j = cnt - 1; j > 0 && b[ j ] > b[ j - 1 ]; --j ) {
        
        /* Swap. */
        int temp = b[ j ];
        b[ j ] = b[ j - 1 ];
        b[ j - 1 ] = temp;
      }
    }
  }
}

void readDat()
{
  int i ;
  FILE *fp ;
  fp = fopen("in.dat", "r") ;
  for(i = 0 ; i < MAX ; i++) fscanf(fp, "%d", &a[i]) ;
  fclose(fp) ;
}

void writeDat()
{
  FILE *fp ;
  int i ;
  fp = fopen("out.dat", "w") ;
  fprintf(fp, "%d\n", cnt) ;
  for(i = 0 ; i < cnt ; i++) fprintf(fp, "%d\n", b[i]) ;
  fclose(fp) ;
}

void main()
{
  int i ;
  readDat() ;
  jsVal() ;
  printf("满足条件的数=%d\n", cnt) ;
  for(i = 0 ; i < cnt ; i++) printf("%d ", b[i]) ;
  printf("\n") ;
  writeDat() ;
}
 
 
 

没人回答的,建议你以后先不要给分,在又满意答案后在追加分数。

你 。。。。。。。
不想说你