user-0 提问: 马戈壁，谁能解释一下我代码他妈那里问题！版主出来！

回复:
user: user-0
content: 好吧，要结贴了，是本人的失误，还是自己看出来的问题，楼上各位分析的都不对，不是时间问题，也不是算法问题，是一个我根本没有注意到的问题，惭愧啊惭愧，一天之后结贴，100分发给找到我问题的人  提交的代码参看39楼

user: user-0
content: 引用 42 楼 langaishangyang 的回复:暴力法多数是超时了 可以试下找规律，尝试另外的算法那这个是什么意思？ 执行测试用例失败!7 解析这组数据出错了：127  我还做了几个关于这个的实验，我在最后的print的数据那加一致后，显示的错误是 执行测试用例失败!8 解析这组数据出错了：128 要是减8的话就是 执行测试用例失败!-1 解析这组数据出错了：119 所以百思不得其解啊

user: user-1
content: 暴力法多数是超时了 可以试下找规律，尝试另外的算法

user: user-1
content: number() 函数不用 printf,必须返回值

user: user-0
content: 引用 46 楼 vcf_reader 的回复:代码绝对有问题你说的真好！

user: user-2
content: 代码绝对有问题

user: user-3
content: 肯定是代码有问题，机器不会骗人

user: user-0
content: 引用 40 楼 ForestDB 的回复:LZ给个原题的链接吧。题目链接:http://hero.csdn.net/OnlineCompiler/Index?ID=237&ExamID=232&from=0

user: user-4
content: LZ给个原题的链接吧。

user: user-0
content: 引用 37 楼 langaishangyang 的回复: #include<stdio.h> int number (int m) {     int i;     int x=0;     int n;     int b;     for(i=1;i<(1<<31)-1;i++)     {         n=i;         b=0;         while(n%10!=7&&n>0){             n=n/10;         }         if(n!=0)          {             x++;             b=1;                     }         // if(!b&&i%7==0) { // 貌似这里也错了         if(b==0 &&i%7==0) {              x++;             b=1;         }         //if(!b) x=0; //楼主代码的逻辑错了         if(b==0) x=0;          if(x==m){             printf("%d\n",i-x+1);             break;         }        }        return 0; } //start 提示：自动阅卷起始唯一标识，请勿删除或增加。 int main() {         printf("%d",number(11)); } //end //提示：自动阅卷结束唯一标识，请勿删除或增加。   2个地方逻辑错误，转成 C# 运行了一下， m = 2, output : 27 m = 7, output : 70 m = 11, output : 270  注意第二个sample, 从 70开始其实可以连续拍手10次, 代码输出的是 连续拍手次数 大于等于 m ，并非仅 等于 m那m等于3时难道要输出未找到么？当我听到连续三声的时候明明就可以判断最低数为70啊，题目不是这个意思

user: user-0
content: 引用 36 楼 langaishangyang 的回复:[quote=引用 34 楼 l786112323 的回复:] [quote=引用 32 楼 langaishangyang 的回复:] 暂且这么理解楼主的代码：  int i;//循环变量     int x=0;//连续拍手次数     int n; //要处理的数字     int b; //1：拍手，0：不拍手  补充： 1. b 可以 bool 值，不必用 int 浪费 2. if (b != 0) x = 0; // b == 0 x才置0， 表示拍手次数从头计C里没有bool，我编译的时候是这么告诉我的[/quote]  那还是用 int ，重点在第2点，改一下逻辑 PS: 手上没有 C 语言编译器，目测以下代码应该能通过    #include<stdio.h> int number (int m) {     int i;     int x=0;     int n;     int b;     for(i=1;i<(1<<31)-1;i++)     {         n=i;         b=0;         while(n%10!=7&&n>0){             n=n/10;         }         if(n!=0)          {             x++;             b=1;                     }         if(!b&&i%7==0) {             x++;             b=1;         }         //if(!b) x=0; //楼主代码的逻辑错了         if(b==0) x=0;          if(x==m){             printf("%d\n",i-x+1);             break;         }       }       return 0; } //start 提示：自动阅卷起始唯一标识，请勿删除或增加。 int main() {         printf("%d",number(11)); } //end //提示：自动阅卷结束唯一标识，请勿删除或增加。 [/quote]哥哥，逻辑没问题！运行不出错，是结果错了

user: user-1
content: #include<stdio.h> int number (int m) {     int i;     int x=0;     int n;     int b;     for(i=1;i<(1<<31)-1;i++)     {         n=i;         b=0;         while(n%10!=7&&n>0){             n=n/10;         }         if(n!=0)          {             x++;             b=1;                     }         // if(!b&&i%7==0) { // 貌似这里也错了         if(b==0 &&i%7==0) {              x++;             b=1;         }         //if(!b) x=0; //楼主代码的逻辑错了         if(b==0) x=0;          if(x==m){             printf("%d\n",i-x+1);             break;         }        }        return 0; } //start 提示：自动阅卷起始唯一标识，请勿删除或增加。 int main() {         printf("%d",number(11)); } //end //提示：自动阅卷结束唯一标识，请勿删除或增加。   2个地方逻辑错误，转成 C# 运行了一下， m = 2, output : 27 m = 7, output : 70 m = 11, output : 270  注意第二个sample, 从 70开始其实可以连续拍手10次, 代码输出的是 连续拍手次数 大于等于 m ，并非仅 等于 m

user: user-1
content: 引用 34 楼 l786112323 的回复:[quote=引用 32 楼 langaishangyang 的回复:] 暂且这么理解楼主的代码：  int i;//循环变量     int x=0;//连续拍手次数     int n; //要处理的数字     int b; //1：拍手，0：不拍手  补充： 1. b 可以 bool 值，不必用 int 浪费 2. if (b != 0) x = 0; // b == 0 x才置0， 表示拍手次数从头计C里没有bool，我编译的时候是这么告诉我的[/quote]  那还是用 int ，重点在第2点，改一下逻辑 PS: 手上没有 C 语言编译器，目测以下代码应该能通过    #include<stdio.h> int number (int m) {     int i;     int x=0;     int n;     int b;     for(i=1;i<(1<<31)-1;i++)     {         n=i;         b=0;         while(n%10!=7&&n>0){             n=n/10;         }         if(n!=0)          {             x++;             b=1;                     }         if(!b&&i%7==0) {             x++;             b=1;         }         //if(!b) x=0; //楼主代码的逻辑错了         if(b==0) x=0;          if(x==m){             printf("%d\n",i-x+1);             break;         }       }       return 0; } //start 提示：自动阅卷起始唯一标识，请勿删除或增加。 int main() {         printf("%d",number(11)); } //end //提示：自动阅卷结束唯一标识，请勿删除或增加。

user: user-5
content: 以前做OJ题的时候，记得有一道题运算量极大，对算法要求很高，大家都卡在超时上 但那道题实际上只有一个测试用例，即只有一个输入只需要一个输出 结果大家都是在自己电脑上跑一段时间得出那个输出结果，然后提交一个直接输出该结果的小程序，照样通过

user: user-5
content: 我明白了，楼主以为自己交上去的代码有人看有人改m值？ 不是这样的，OJ系统只提供标准输入并判断程序的输出结果，你交上去的代码它直接编译运行，不会看里面的任何东西，所以你提供if一点意义都没有，你应该scanf从标准输入读取m值 我还以为楼主这段代码是解释自己思路的，没想到楼主提交的就是这段代码，这肯定不行啊，系统哪管你代码每一段是啥意思，它只看程序运行时的输入输出

user: user-0
content: 拜托各位大神，把我的代码复制下去，看看输出有没有什么问题，不行就用我的代码也去挑战一下，看一下哪个测试用例错了，或者有哪位高人挑战成功了，恳请您把代码借我参考一下qq786112323

user: user-0
content: 引用 32 楼 langaishangyang 的回复:暂且这么理解楼主的代码：  int i;//循环变量     int x=0;//连续拍手次数     int n; //要处理的数字     int b; //1：拍手，0：不拍手  补充： 1. b 可以 bool 值，不必用 int 浪费 2. if (b != 0) x = 0; // b == 0 x才置0， 表示拍手次数从头计C里没有bool，我编译的时候是这么告诉我的

user: user-1
content: 引用 31 楼 langaishangyang 的回复:#Line 27 : if(!b&&i%7==0)  有问题，i%7==0 成立就可以拍手了  sorry, 理解错了， 这样可能清晰一些   if (n != 0)                 {                    // x++;                     b = true;                 }                 if ( i % 7 == 0)                 {                     //x++;                     b = true;                 }                 if (!b) x = 0;                 else x++;

user: user-1
content: 暂且这么理解楼主的代码：  int i;//循环变量     int x=0;//连续拍手次数     int n; //要处理的数字     int b; //1：拍手，0：不拍手  补充： 1. b 可以 bool 值，不必用 int 浪费 2. if (b != 0) x = 0; // b == 0 x才置0， 表示拍手次数从头计

user: user-1
content: #Line 27 : if(!b&&i%7==0)  有问题，i%7==0 成立就可以拍手了