2, 10个硬币外形无差别,知道其中一个硬币重量比较轻,要在天秤上怎么样只称两次不用砝码就找出那个假的?

答:第一次:5个分为一组 找到轻的那组

第二次:在有问题那组里任意选4 两个一组再称。
1
)如天平平衡,那么没有选的那个有问题。
2
)如不平衡,可以知道轻的那一边有问题,只有2个,拿起其中一个,另一边也取一个,如现在平衡,那么拿起的那一个有问题, 如不平衡没取的那个就是

3,从199999之间,求出所有满足以下条件的数x1x是完全平方数;2x有两位数相同。如:12111*11,且它有两位数相同,故它满足条件。

 

  1. /************************************************************************/ 
  2. /* Author:phinecos   Date:2009-05-20                                                                       
  3. /************************************************************************/ 
  4. #include <iostream>  
  5. #include <map>  
  6. #include <string>  
  7. using namespace std;  
  8.  
  9. struct node  
  10. {  
  11.     int value;  
  12.     int count;  
  13. };  
  14.  
  15. bool isOk(int num)  
  16. {  
  17.     int i,tmp;  
  18.     bool result = false;  
  19.     map<intint> numMap;  
  20.  
  21.     //初始化  
  22.     for (i = 0; i< 10; ++i)  
  23.     {  
  24.         numMap[i] = 0;  
  25.     }  
  26.     //剥离数位  
  27.     while (num != 0)  
  28.     {  
  29.         tmp = num%10;  
  30.         ++numMap[tmp];  
  31.         num /= 10;  
  32.     }  
  33.     //判断是否仅有一个数位有个  
  34.     int count = 0;  
  35.     map<int,int>::iterator iter;  
  36.     for (iter = numMap.begin(); iter != numMap.end(); ++iter)  
  37.     {  
  38.         if (iter->second == 2)  
  39.         {  
  40.             ++count;  
  41.         }  
  42.     }  
  43.     if (count == 1)  
  44.     {//仅有位出现次  
  45.         result = true;  
  46.     }  
  47.     return result;  
  48. }  
  49. int main(int argc, char* argv[])   
  50. {   
  51.     for (int i=1; i <= 316; ++i)  
  52.     {  
  53.         if (isOk(i*i))  
  54.         {  
  55.             cout << i*i <<endl;  
  56.         }  
  57.     }  
  58.     return 0;   
  59. }  

4,题目:网球中心共有100个网球场,每个单位可以来申请1100的场地,申请的场地编号必须是连续的,如果场地已经被其他单位占用,就不能再次使用,而且单位在使用完场地后必须归还。请设计一个完整的系统。

  1. #include <iostream>  
  2. #include <vector>  
  3. #include <string>  
  4. using namespace std;  
  5.  
  6. /************************************************************************/ 
  7. /* Author:phinecos    Date:2009-05-20                                                                     */ 
  8. /************************************************************************/ 
  9. struct TennisCourt  
  10. {//网球场  
  11.     int serialNum;//编号  
  12.     bool bOccupied;//是否被占用  
  13.     string Owner;//占用者  
  14. };  
  15. //网球中心  
  16. class TennisCenter  
  17. {  
  18. public:  
  19.     TennisCenter();  
  20.     void print()const;  
  21.     bool requestCourts(int num, const char* requester,vector<int>& alloctedCourts);//请求num块场地,若分配成功,则返回分配的场地的编号  
  22.     bool returnCourts(const char* returner, const vector<int>& alloctedCourts);//归还连续编号的场地  
  23.     int getEmpytCourts()const;  
  24. protected:  
  25.     void init();  
  26.     void allocateCourts(int begin, int end, const char* requester);  
  27.     bool IsValidOwner(int begin, int end, const char* returner);  
  28.     void freeCourts(int begin, int end);  
  29. private:  
  30.     vector<TennisCourt> courts;//场地  
  31.     int nEmptyCourt;//空余的场地  
  32.     static const int MAX_CAPACITY = 100;//场地最大数目  
  33. };  
  34. TennisCenter::TennisCenter()  
  35. {  
  36.     this->init();  
  37. }  
  38. void TennisCenter::init()  
  39. {  
  40.     nEmptyCourt = MAX_CAPACITY;//空余块场地  
  41.     courts.resize(MAX_CAPACITY);  
  42.     for (int i = 0; i < MAX_CAPACITY; ++i)  
  43.     {  
  44.         courts[i].serialNum = i+1;  
  45.         courts[i].bOccupied = false;  
  46.         courts[i].Owner = "";  
  47.     }  
  48. }  
  49. void TennisCenter::print()const 
  50. {  
  51.     vector<TennisCourt>::const_iterator iter;  
  52.     for (iter = courts.begin(); iter != courts.end(); ++iter)  
  53.     {  
  54.         cout << iter->serialNum << '\t' ;  
  55.         if(iter->bOccupied)  
  56.             cout<< iter->Owner << '\t';  
  57.         cout <<endl;  
  58.     }  
  59. }  
  60. void TennisCenter::allocateCourts(int begin, int end, const char* requester)  
  61. {  
  62.     for (int i = begin;i < end; ++i)  
  63.     {  
  64.         courts[i].bOccupied = true;  
  65.         courts[i].Owner = requester;  
  66.         --this->nEmptyCourt;//剩余场地递减  
  67.     }  
  68. }  
  69. bool TennisCenter::IsValidOwner(int begin, int end, const char* returner)  
  70. {//是否是合法拥有者  
  71.     for (int i = begin;i <= end; ++i)  
  72.     {  
  73.         if (courts[i].Owner.compare(returner) != 0)  
  74.         {  
  75.             return false;  
  76.         }  
  77.     }  
  78.     return true;  
  79. }  
  80. void TennisCenter::freeCourts(int begin, int end)  
  81. {  
  82.     for (int i = begin;i <= end; ++i)  
  83.     {  
  84.         courts[i].bOccupied = false;  
  85.         courts[i].Owner = "";  
  86.         ++this->nEmptyCourt;//剩余场地递增  
  87.     }  
  88. }  
  89. bool TennisCenter::requestCourts(int num, const char* requester, vector<int>& alloctedCourts)  
  90. {//请求num块场地,若分配成功,则返回true,输出参数中保存分配的场地的编号,否则返回false  
  91.     cout << "剩余" << this->nEmptyCourt << "块场地" <<endl;  
  92.     alloctedCourts.clear();  
  93.     bool result = false;  
  94.     if (num > this->nEmptyCourt)//剩余场地不够,不需再查看  
  95.         return false;  
  96.  
  97.     //剩余场地数目够,看是否有足够连续多的场地满足用户请求  
  98.     int i,j,k;  
  99.     for (i = 0; i < MAX_CAPACITY; ++i)  
  100.     {  
  101.         for (j = i,k = 0; j < MAX_CAPACITY && k< num; ++j,++k)  
  102.         {  
  103.             if (courts[j].bOccupied == true)  
  104.             {//有被占用,未能连续  
  105.                 break;  
  106.             }  
  107.         }  
  108.         if (k == num)  
  109.         {//有连续num个空场地,分配给请求者  
  110.             this->allocateCourts(i,i+num,requester);  
  111.             for (k = i; k < i+num; ++k)  
  112.             {  
  113.                 alloctedCourts.push_back(k+1);  
  114.             }  
  115.             result = true;  
  116.             break;  
  117.         }  
  118.     }  
  119.     return result;  
  120. }  
  121. bool TennisCenter::returnCourts(const char* returner, const vector<int>& alloctedCourts)  
  122. {//归还连续编号的场地  
  123.     int begin = alloctedCourts[0]-1;  
  124.     int end = alloctedCourts[alloctedCourts.size()-1]-1;  
  125.     if (!this->IsValidOwner(begin, end, returner))  
  126.     {//非法持有者不能归还  
  127.         return false;  
  128.     }  
  129.     this->freeCourts(begin, end);  
  130.     return true;  
  131.  
  132. }  
  133. int TennisCenter::getEmpytCourts()const 
  134. {  
  135.     return this->nEmptyCourt;  
  136. }  
  137. void showAllocatedCourts(const vector<int>& courts)  
  138. {  
  139.     vector<int>::const_iterator iter;  
  140.     for (iter = courts.begin(); iter != courts.end(); ++iter)  
  141.     {  
  142.         cout << *iter << endl;  
  143.     }  
  144. }  
  145. int main(int argc, char* argv[])   
  146. {  
  147.     TennisCenter tennisCenter;  
  148.     vector<int> allocatedCourts;  
  149.     bool result = tennisCenter.requestCourts(30,"张三",allocatedCourts);  
  150.     if (result)  
  151.     {  
  152.         showAllocatedCourts(allocatedCourts);  
  153.     }  
  154.     else 
  155.     {  
  156.         cout << "无足够的场地分配" << endl;  
  157.     }  
  158.     cout << "归还前: " << tennisCenter.getEmpytCourts() << endl;  
  159.     tennisCenter.print();  
  160.     tennisCenter.returnCourts("张三",allocatedCourts);  
  161.     cout << "归还后: " << tennisCenter.getEmpytCourts() << endl;  
  162.     tennisCenter.print();  
  163.     cout <<endl << endl;  
  164.     if (tennisCenter.requestCourts(60,"李四",allocatedCourts))  
  165.     {  
  166.         showAllocatedCourts(allocatedCourts);  
  167.     }  
  168.     else 
  169.     {  
  170.         cout << "无足够的场地分配" << endl;  
  171.     }  
  172.     cout <<endl << endl;  
  173.     cout << "归还前: " << tennisCenter.getEmpytCourts() << endl;  
  174.     tennisCenter.print();  
  175.     tennisCenter.returnCourts("李四",allocatedCourts);  
  176.     cout << "归还后: " << tennisCenter.getEmpytCourts() << endl;  
  177.     if (result = tennisCenter.requestCourts(20,"王五",allocatedCourts))  
  178.     {  
  179.         showAllocatedCourts(allocatedCourts);  
  180.     }  
  181.     else 
  182.     {  
  183.         cout << "无足够的场地分配" << endl;  
  184.     }  
  185.     cout << "王五还未归还."<< endl;  
  186.     tennisCenter.print();  
  187.     return 0;   
  188. }