解題報告:九度1097

題目描述:

     存在兩組數組,和4個數字a,b,c,d,要求做如下操作,將第一個數組第a個數到第b個數,第二個數組的第c個數到第d個數放到一個數組中,求出合併後數組的中間值,如果有兩個中間值,取下標較小的那個。

輸入:

    第一行一個整數t表示有t個測試數據
    第二行兩個整數,表示兩個數組的長度,
    接下來兩行表示兩個數字的值,

    最後一行有四個整數a,b,c,d。

    數組長度不會超過1000000。

輸出:

    每行一個整數,對應合併數組的下標在中間的那個值。

樣例輸入:
1
5 4
1 2 3 4 5
6 7 8 9
1 2
1 3
樣例輸出:
6

    這道題不怎麼難,直接開數組進行移動數據就可以了,可是這道題裏我犯了一個錯誤,導致困了7個小時,愣是沒發現,太水啊!先貼上TLE的代碼:
#include<stdio.h>
#include<stdlib.h>
int a[100000],b[100000],c[100000];
 
int main()
{
    int t,m,n,i,j,t1,t2,t3,t4,x,y,z,u;
     
    while(~scanf("%d",&t))
    {
        for(i= 0; i < t; i++)
        {
              scanf("%d%d",&m,&n);
         
              for(i = 0; i < m; i++)
                    scanf("%d",&a[i]);
              for(j = 0; j < n; j++)
                    scanf("%d",&b[j]);
         
              scanf("%d%d%d%d",&t1,&t2,&t3,&t4);
         
              x = t2 - t1 + 1;
              y = t4 - t3 + 1;
              u = x + y;
         
              for(i = 0,j = t1 - 1;j <= t2; i++,j++)
                    c[i]= a[j];
         
              for(i = x,j = t3 - 1; j <= t4; i++,j++)
                    c[i] = b[j];
         
              z =  (u % 2 == 0) ? (u / 2 - 1) : (u / 2);
 
              printf("%d\n",c[z]);
        }
      }
         
    //system("pause");
    return 0;
}
以上是超時的代碼,但是在我本人的DEV-C++上運行結果完全正確。那個糾結啊,看了好久未果,不知道錯了多少次了,最後
發現是這兒的問題:
for(i = 0; i < t; i++)
        {
              scanf("%d%d",&m,&n);
         
              for(i = 0; i < m; i++)
原來是變量使用的問題,內部循環裏有一個i++,這使得程序老是超時,最後改了,果斷AC,這是第一次碰到變量是用導致程序
出錯,雖然是很水的錯誤,可是還是想寫下來,做個教訓吧
下面貼上正確代碼:
#include<stdio.h>
#include<stdlib.h>
 
int a[100000],b[100000],c[100000];
 
int main()
{
    int t,m,n,i,j,k,t1,t2,t3,t4,x,y,z,u;
     
    while(~scanf("%d",&t))
    {
        for(i = 0; i < t; i++)
        {
              scanf("%d%d",&m,&n);
         
              for(k= 0; k < m; k++)
                    scanf("%d",&a[k]);
              for(j = 0; j < n; j++)
                    scanf("%d",&b[j]);
         
              scanf("%d%d%d%d",&t1,&t2,&t3,&t4);
         
              x = t2 - t1 + 1;
              y = t4 - t3 + 1;
              u = x + y;
         
              for(k = 0,j = t1 - 1;j <= t2; k++,j++)
                    c[k] = a[j];
         
              for(k = x,j = t3 - 1; j <= t4; k++,j++)
                    c[k] = b[j];
         
              z =  (u % 2 == 0) ? (u / 2 - 1) : (u / 2);
 
              printf("%d\n",c[z]);
        }
      }
         
    //system("pause");
    return 0;
}
         


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章