| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 552 人关注过本帖
标题:能不能帮我看一下我的课程设计,低分的比较简单
只看楼主 加入收藏
vincent1996
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2014-7-2
结帖率:0
收藏
已结贴  问题点数:20 回复次数:6 
能不能帮我看一下我的课程设计,低分的比较简单
目的:通过本课程设计,培养学生算法设计的能力,运用语言编程及调试的能力,运用计算机解决实际问题的能力,为后续计算机专业课程的学习打下坚实的基础。
要求:输入一个正整数N,从小到大输出满足如下条件的整数:
  是7和7的倍数
  包含7的数字
  且输出的数字≤ N
  例如(17,27,37...70,71,72,73...)
搜索更多相关主题的帖子: 计算机专业 语言编程 正整数 低分 课程 
2014-07-02 21:59
vincent1996
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2014-7-2
收藏
得分:0 
这个是我自己编写的程序,很简单,就是从1枚举到N,对每一个数字进行判断
#include<iostream>
using namespace std;
int search(int n) {
    if(n%7==0)return 1;
    else
        while(n)
        {
            if(n%10==7) return 1;
            n/=10;
        }
        return 0;
}
void main(){
    int N;
    cout<<"请输入N的值";
    cin>>N;
    for(int i=7;i<=N;i++)
        if(search(i))
            cout<<i<<" ";
        cout<<endl;
}

南风知我意,吹梦到西州
2014-07-02 22:01
vincent1996
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2014-7-2
收藏
得分:0 
但是要是考虑N是很大的数 这个方法就太笨了,下面是一个同学给找的程序,vc运行不出结果,找不出来错误啊,大神帮下看下吧。

#include "stdio.h"
#include "math.h"
int found7(int x)
{ /*查找x的每个数位,确认是否包含数字7,函数返回发现7的地方,0表示没有,1表示7在个位,2表示在十位,以此类推*/
 int find,l,digit;
 int y;
 find=false;
 l=0;
 y=x;
 if ((y<10)&&(y==7))
 {
  find=true;
  l++;
  return (l);
 }
 while((y>=10)&&(find==false))
 { /*由个位开始查找输入的x值是否含有数字7,y为x在计算中的中间变量*/
  digit=y%10; /*求当前y值的个位上的数值,即y整除10取其余数*/
  l++; /*L代表当前正在计算x的数位是个位还是十位,1代表各位,2代表十位,以此类推*/
  if (digit==7)
  { /*若发现7,退出循环while*/
   find=true;
   break;
  }/*if*/
  y=y/10; /*若没发现7,继续往高位计算*/
  if ((y<10)&&(y==7))
  { /*当y<10的时候,不足以继续整除10求余数,则直接比对是否与7相等,相等则找到*/
   find=true;
   l++;
   return (l);
  }
 }/*while*/
 /*根据是否找到7来返回7相对应的数位*/
 if (find)
  return (l);
 else
  return (0);
}/*found7()*/
main()
{
 int y0,y1,y2,y3,y_temp;
 int h,j,s,max_n,input_N;
 int key,n,input_ERROR;
 int d1,d2,d3;
 char c;
 input_ERROR=false;
 while (input_ERROR)
 {
  printf("please input the value of N,N=");
  scanf("%d",&input_N);
  printf("\n");
  {
      if (input_N<7) printf("\nERROR! N<7, Question no ANSWER!\n");
      printf("Do you want to run the program again?(Y/N):");
     c=getchar();
     while (c!='Y'&&c!='y'&&c!='n'&&c!='N')
     {
      printf("\nERROR! Wrong input!\n\n");
      printf("Do you want to run the program again?(Y/N):");
      c=getchar();
     }/*while*/
     if (c=='n'||c=='N')
         return 0;
     else
         input_ERROR=false;
  }
 s=1;
 h=1;
 j=0;
 y0=0;
 y1=0;
 y2=0;
 y3=0;
 d1=1;
 d2=1;
 d3=1;
 while(y0<=input_N)
 {
  if(d3)
  { /*y3数列的等式原形为,y3=s*10+n,其中s和n属于正整数,且n∈[0,10^k-1] */
   y3=s*10;
   while(!found7(y3))
   { /*求仅当y3的十位以上含有7的数*/
    s++;
    y3=s*10;
   }/*while y3*/
  }
  if(d1)
  { /*y1数列为7的倍数*/
   y1=7*h;
   while(found7(y1)>0)
   { /*求仅当y1任何数位均不含7的数*/
    h++;
    y1=7*h;
   }/*while y1*/
  }

  if(d2)
  { /*y2数列为末位为7的数*/
   y2=10*j+7;
   y_temp=y2-7;
   while(found7(y_temp)>0)
   { /*求y2的十位及以上均不含7的数*/
    j++;
    y_temp=10*j;
    y2=10*j+7;
   }/*while y2*/
  }
  /* find the min value from y[1],y[2],y[3] */
  /*求y1,y2,y3中的最小值,由上求y1,y2,y3的条件得出,y1,y2,y3互不相等*/
  key=0;
  if ((y1<y2)&&(y1<y3))
  { /*y1确认为最小值,优先输出*/
   y0=y1; /*y0为最后数列输出的控制值*/
   key=1; /*后面输出选项控制开关值*/
   h++; /*计算y1值的下个初始参数值*/
   d1=1; /*d1,d2,d2为重新计算y1,y2,y3的开关值,没有输出的值不必更新,以下说明相同*/
   d2=0;
   d3=0;
  }
  if ((y2<y1)&&(y2<y3))
  { /*y2确认为最小值,优先输出*/
   y0=y2;
   key=2;
   j++;
   d1=0;
   d2=1;
   d3=0;
  }
  if ((y1>y3)&&(y2>y3))
  { /*y3确认为最小值,优先输出*/
   y0=y3;
   key=3;
   d1=0;
   d2=0;
   d3=1;
  }
  switch (key)
  {
  case 1:
    if (y0<=input_N) printf("%d\t",y0); /*当y0符合输入条件的范围时,输出到屏幕,原题目要求是每行输出1个数字,本程序为了容易检查,采取横向输出,若按题目可将\t改为\n */
    break;
  case 2:
    max_n=pow(10,found7(y0)-1); /*y3=10*s+n,n∈[0,max_n-1],10*s数值中找第found7(y0)位为7,根据前面返回的说明,个位返回为1,十位返回为2,以此类推,则有10的found7(y0)-1次方为上限的元素个数,即7在十位,返回2,应有n∈[1-10),即n∈[1-10^(2-1))*/
    for (n=0;n<max_n;n++)
     if ((y0+n)<=input_N)
      printf("%d\t",y0+n); /*在题目要求的范围内输出y0值*/
     else
      return 0; /*若已超过题目范围则直接退出程序的运行*/
    c=getchar(); /*此处为程序暂停处,方便检查核对答案,可以注释掉*/
    if (y3<=(y0+max_n-1))
    { /*当输出一连串数值后,若y3=10*s远小于最后的输出值,则增大s的值直到y3刚好大于最后的输出值,以下相同*/
     while(y3<=(y0+max_n-1))
     {
      s++;
      y3=10*s;
     }
    }
    if (y1<=(y0+max_n-1))
    { /*当输出一连串数值后,若y1=7*h远小于最后的输出值,则增大h的值直到y1刚好大于最后的输出值*/
     while(y1<=(y0+max_n-1))
     {
      h++;
      y1=7*h;
     }
    }
    if (y2<=(y0+max_n-1))
    { /*当输出一连串数值后,若y2=10*j+7远小于最后的输出值,则增大j的值直到y2刚好大于最后的输出值*/
     while(y2<=(y0+max_n-1))
     {
      j++;
      y2=10*j+7;
     }
    }
    break;
  }
 }
}

南风知我意,吹梦到西州
2014-07-02 22:04
vincent1996
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2014-7-2
收藏
得分:0 

南风知我意,吹梦到西州
2014-07-02 22:12
haolongo
Rank: 2
等 级:论坛游民
帖 子:6
专家分:39
注 册:2013-1-19
收藏
得分:20 
我地个妈呀。这么简单的题 。搞这么一串代码。太晕了。可以找我。没几个代码就能搞定。用交换算法 int a,b,t;
IF(A值大就把B值付给A这样比下来就行了。
t=a;
a=b;
a=t; 比大小  。要是还不懂。这几天要忙两天两天后可以找我加我Q:82272756
2014-07-02 22:18
vincent1996
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2014-7-2
收藏
得分:0 
回复 5 楼 haolongo
可是老师说我的太简单了,让我考虑N很大的情况,不给过啊= =。 所以只好找复杂的程序了

南风知我意,吹梦到西州
2014-07-02 22:39
vincent1996
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2014-7-2
收藏
得分:0 
回复 5 楼 haolongo
是不是vc6.0不支持这个程序调用的数据库啊,有同学是这么说的,正在下新的编译软件

南风知我意,吹梦到西州
2014-07-02 22:43
快速回复:能不能帮我看一下我的课程设计,低分的比较简单
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.033911 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved