求高手帮忙解决下面这个C++中的一个题目。看俺的代码哪里有错,谢谢了

作者&投稿:迟严 (联系方式在网页底部的电邮联系)
求各位C++高手帮我看看下面这个代码,问题出在哪里。~

#include
using namespace std;
int main()
{
int a[15]={15,14,13,12,11,10,9,8,7,6,5,4,3,2,1};
int p,mid,start,end;
while(cin>>p){
start=0;end=14;
if(p>a[0]||p<a[14])cout<<"无此表"<<endl;
else if(p==a[0])cout<<"该数是数组中第1个元素的值"<<endl;
else if(p==a[14])cout<<"该数是数组中第15个元素的值"<<endl;
else {bool find=false;
do{
if((end-start)<=1){
if(p==a[start]){cout<<"该数是数组中第"<<start+1<<"个元素的值"<<endl;find=true;break;}
if(p==a[end]){cout<<"该数是数组中第"<<end+1<<"个元素的值"<<endl;find=true;break;}}
mid=(start+end)/2;
if(p==a[mid]){cout<<"该数是数组中第"<<mid+1<<"个元素的值"<<endl;find=true;break;}
else if(p>a[mid])
end =mid-1; ////// 算法出现了 问题
else
start =mid+1; /////
}while(mid>=1&&mid<=13);
if(!find)cout<<"无此表"<<endl;}}
return 0;
}
两句算法有问题 上面就是正确的就是改了两行算法而已。 很简单 你看看就明白,你可能大意了。OK 给分吧 老兄。三秋

改为这样,你上面定义的函数是有参数的,所以你要传参数进去。
FindIntersection(A,B); //
FindUnion(A,B); //
FindDeference(A,B);

你有几个地方有错误:
1.求个位数,直接用n%10就可以了,你那样子是求的最高位的值
2.既然你已经定了个位为7,直接给m赋7就可以了吧。
3.你上面那样子算的时候,最后退出第一个while循环的时候,n是为0的,下面不能用这个n计算,你若是不断的用n/=10,开始应该用个变量保存这个n的值
4.还有在main中,不能单单不断b/a==T ,因为整数出的时候,若是不能整除,是会四舍五入的
5.这个题目其实最好的办法是你用数学推导的办法来计算,你自己可以推推,不用穷举的
#include<iostream>
using namespace std;
int change(int n)
{
int m;
m = 7;
int p = n / 10; //求出除去个位数后得到的数
while (n >= 10)
{
m = m * 10;
n /= 10;
} //将个位数移到最高位
int q = m + p; //得出最后得到的数
return q;
}
int main()
{
int T, a, b;
while (cin >> T)
{
int find = false;
for (int i = 0; i <= 99999; i++)
{
a = i * 10 + 7;
b = change(a);
if(b%a==0 && (b/a) == T)
{
cout << a << endl;
find = true;
break;
}
}
if (!find)
cout << "No" << endl;
}
return 0;
}

#include<iostream>
using namespace std;
int change(int n){
int m;
m=n%10; //求出个位数
int p=n/10; //求出除去个位数后得到的数
while(n>=10){
m=m*10;
n/=10;} //将个位数移到最高位
int q=m+p; //得出最后得到的数
cout<<q<<endl;
return q;}
int main()
{
int T,a,b;
while(cin>>T){
int find=false;
for(int i=0;i<=99999;i++){
a=i*10+7;
b=change(a);
if(b/a==T){cout<<a<<endl;find=true;break;}
}
if(!find)cout<<"No"<<endl;
}
return 0;
}

楼上回答的很好了,就有一点,整数除以整数不是四舍五入,而是取整,即只会舍,不会入。

你在循环里将n的值改变了。试一下这个:
int change(int n){
int m=n%10;
//求出个位数
int p=n/10; //求出除去个位数后得到的数
n=p;
while(n>0){
m=m*10;
n/=10;} //将个位数移到最高位
int q=m+p; //得出最后得到的数
return q;}

相关视频

求高手帮忙解决下面这个C++中的一个题目。看俺的代码哪里有错,谢谢了...
1.求个位数,直接用n%10就可以了,你那样子是求的最高位的值 2.既然你已经定了个位为7,直接给m赋7就可以了吧。3.你上面那样子算的时候,最后退出第一个while循环的时候,n是为0的,下面不能用这个n计算,你若是不断的用n\/=10,开始应该用个变量保存这个n的值 4.还有在main中,不能单单不断b\/a==T ,因为整数出的时候,若

c语言编程高手请进:麻烦帮忙解决下面这个菜鸟级的问题!(两个问题),求...
x,s);}1.long DoTest(char* s){if (s == NULL){return 0;}int n = strlen(s);long ret = 0;int count = 1;for(int i = n-1; i > -1; i--){char c = s[i];if (c !

哪位大佬帮帮忙啊,这个C语言不会啊
首先来看下程序运行的结果,由下图可知,本题目的答案为:D (16)下面我们分析一下下面的题目:1、在函数 f(int b[][4])中,for的循环体执行了4次,分别是j = 0, 1, 2, 3。2、条件if(i> 2)只有 i=j=3时才满足,所以这个条件只有最后一次才会被执行。3、因为 i = j, 所以前三次的...

跪求!哪位C语言高手帮忙编下下面的程序, 麻烦把程序发到799792271@qq...
main.c Created on: 2011-6-6 Author: icelights \/ include <stdio.h> include <stdlib.h> include <string.h> include <ctype.h> define TotalStu 5 \/*学生总数Total student*\/ struct Database { \/*学号Student No.*\/ char sn[80];\/*笔试成绩Written test score*\/ double wts...

求高手帮忙啊!我有一个C程序请高手帮我把程序补完!急求!
\/*如果已经输出完了基数,则不必再输出加号*\/ else printf("%d+",l); \/*未输出完则输出基数值和+号,继续循环输出下个值*\/ l=l+2;} \/*基数值加2,准备下次循环输出*\/ printf("\\nplease input:");scanf("%d",&a); \/*提示输入下个自然数*\/ } } return 0;}

请用C语言程序编程,高手请帮忙!有重金赏!请看下面题目:
这个阶梯有119步,程序如下:main(){ int x=7;while (x%2!=1 || x%3!=2 || x%4!=3 || x%5!=4 || x%6!=5) x+=7;printf("%d\\n",x);} 程序根据7步刚好走完这一信息,从7开始测试是否满足要求,不满足就加7再测试,知道满足为止。FOR...