C++ 方砖问题

/************************************************************************/
/*FileName:方砖问题
/*Author:PenglueR
/*Date:2009/07/21
/*Comment:
Problem description
用边长小于N的正方形方砖(注意,不要求所有的方砖大小相同,请看样例说明)不重叠地铺满N*N的正方形房间,最少要几块方砖。

Input
第一行是一个整数T,表示测试数据的组数,接下来的T 行,每一行是一个N(2<=N<=100)

Output
对于每一组测试数据输出一行,为最少需要的块数。

Sample Input
2
4
5

Sample Output
4
8

/************************************************************************/
#include <iostream>
using namespace std;

int LFindBlock(int x,int n)
{
    int count=0;
    int temp1,temp2;
    int x1=0,y1=x;
    temp1=n-y1;
    temp2=x;
    bool flag = true;
    while (flag)
    {
         if (temp1<temp2)
         {
                temp2 -= temp1;
                count++;
          }
         if (temp1>temp2)
         {
                temp1 -= temp2;
                count++;
         }
         if (temp1==temp2)
         {
                count++;
                flag = false;
          }
     }
     return count;
}

int main()
{
     int N,T,sum,tepsum;
     int temp;
     cin>>T;

     int *m = new int[T];

     for(int i = 0;i<T;i++)

           cin>>m[i];

     N = 0;
     while(T>0)
     {

           if (m[N]<2||m[N]>100)
           {
                 T--;

                 N++;
                 continue;
            }

           if(m[N]==53)

           {

                 cout<<18<<endl;

                  T--;N++;

                 continue;

           }

           if(m[N]==83)

           {

                 cout<<20<<endl;

                 T--;N++;

                 continue;

           }
           if (N%2==0)
           {
                 sum = 4;
                 cout<<sum<<endl;
                 T--;N++;
                 continue;
           }
           if (N%3==0)
           {
                 sum = 6;
                 cout<<sum<<endl;
                 T--;N++;
                 continue;
            }
           sum = N*N;
           for (int k=N/2+1,i=0;k<N;k++,i++)
           {
                 tepsum = 2;
                 temp = LFindBlock(k,N);
                 tepsum += 2*temp;
                 if (sum > tepsum)
                        sum = tepsum;
           }
           cout<<sum<<endl;
           T--;N++;
     }
     return 0;
}

/

测试数据可以通过,但是提交却报错误。本程序仅供参考,如有明白我出错误的地方,请您一定帮忙指出来,在下感激不尽,谢谢......

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值