打印

[原创] 一道经典的C++题,关于分钱的问题,适合新手阅读

楼主算的不对啊

我把楼住的答案调试了下,才18种算法?你做的是凑成1角吧!
那个三分就当五分吧
什么一分3个二分5个,五分2个,这能凑成1元........
还有一分4个 二分4个,三分2个,楼住把答案修改下吧。
研究VB和C++技术,X杂志忠实读者

TOP

求水仙数

引用:
原帖由 ai357299256 于 2008-4-29 16:13 发表
哈哈,for 语句。 教材上还有怎么一道题 ,和这个差不多。编程找出一亿以内的水仙花数。所谓水仙花数就是各位数字的立方和等于该数本身。如 153=1*1*1+5*5*+3*3*3,有兴趣的话自己可以做下。 ...
#include<iostream>
#include<math.h>
using namespace std;
//i=153,n=3 ;j=1,k=3;j=2 k=8
int main()
{
int i,j,k,n;     //i是用来循环,n用来判断几位数

for (i=1;i<=100000000;i++)  //最多9位数
{   
n=0;
if ((i/10)<1)           //用switch,case做可以写的简单些
  n=1;
else if ((i/100)<1)  
  n=2;
  else if ((i/1000)<1)  
  n=3;
else if ((i/10000)<1)  
  n=4;
else if ((i/100000)<1)  
  n=5;
else if ((i/1000000)<1)  
  n=6;
else if ((i/10000000)<1)  
  n=7;
else if ((i/100000000)<1)  
  n=8;
else if ((i/1000000000)<1)  
  n=9;
   
k=0;
    for(j=1;j<=n;j++)  
  k=k+pow((int(i/(pow(10,(j-1)))))%10,3);  //(int{ i初以(10的j-1次方)}再%10)的立方
    if (k==i) cout<<i<<endl;   
}
return 0;
}

//得到结果1,153,370,371,407
研究VB和C++技术,X杂志忠实读者
看一下,学习。
[

TOP

................看看~!
我用深搜,总感觉光用循环不太对呢。。。
不过,我这个深搜是讲顺序的,所以结果很可怕。
如果要计算N=100,请把输出方案的语句注释掉。
N是总钱数,用分表示。



/*
By Gip0
20080530 2142
*/


#include <stdio.h>
#include <stdlib.h>

bool func(int n);
bool print(int n);

int N = 5;    //money (cents) in total
int notes[] = {1, 2, 5};

int steps[101] = {0};
long results = 0;

int main()
{
    func(1);
   
    printf("%d\n", results);
   
    system("PAUSE");
return 0;
}

bool func(int n)
{
    for(int i = 0;i <= 2;i++)
    {
        if(N - notes < 0)
            continue;
        
        if(N - notes > 0)
        {
            steps[n] = i;
            N -= notes;
            
            func(n + 1);
            
            N += notes;
            steps[n] = 0;
        }
        
        if(N - notes == 0)
        {
            steps[n] = i;
            print(n);
        }
    }
return 0;
}

bool print(int n)
{
     
     for(int i = 1;i <= n;i++)
         printf("%d ", notes[steps]);
     printf("\n");
     
     results++;
return 0;
}

TOP

看看。。。。。。。。。。。。。。。
我想学习!慢慢得变黑!
呵呵  .....for   语句和if语句的结合...然后输出

TOP

貌似不会很难。。。。。。。。。。。。。。。。。。。。。。。。。
#include <iostream.h>

void main()
{
        int i,j,k;
        for (i=1;i<100;i++)
                for(j=1;j<20;j++)
                        for(k=1;k<50;k++)
                                if ((i+2*j+5*k)==100)
                                        cout<<"一分的:"<<i<<"  二分的:"<<j<<"  五分的:"<<k<<endl;
}

TOP

我看看

Processed in 0.275102 second(s), 5 queries, Gzip enabled