2013-11-23 45 views
-2

我的任务是:在每种语言中是n个最常用的单词。一天后的一个男孩正在前往瑞典。想要了解瑞典语,第一天他学习z字和接下来的每一天都会比前一天更多地学习k个单词。写一个程序,它会检查一个男孩是否会在d天内成功学习n个单词。使用文件和FOR循环

假设他需要学习100个单词。他有20天。第一天他学到了5个字。接下来的一天,他比前一天多了一个字。

在这种情况下答案应该是:(他将成功地将持续20天。请吧),和(期间11天,他将学习100个字)。

我写了一段代码。

#include <iostream> 
#include <fstream> 
#include <iomanip> 

using namespace std; 

int main() 
{ 


int n, d=0, k, z; 



ofstream fr("Rezults.txt"); 
ifstream fd("Data.txt"); 
fd>>n>>d>>z>>k; 


     int learned_words = 0; 

     for(int i=0; i<d; i++){ 
      learned_words += z; 
      z = z+k; 
     } 

     if(n<=learned_words) { 
      fr<<"Yes"<<endl; 
     } 
     else 
     { 
      fr<<"No"<<endl; 

     } 

    z=z-d; d=0; 
    for(int m=0; m<=n; m+=z, z+=k, d++) {} 

    cout << "You need " << d << " days to learn " << n << " words"; 

fd.close(); 

fr<<d; 


fr.close(); 


return 0; 
} 
+0

你为什么要问,而不是简单地尝试和运行你的代码? –

+1

你的意思是可以计算,而不是计算'n + 1-z'?是的,创建一个新的变量count并执行for(i = z,count = 0; i <= n; i = i + 1,count ++)'。在发布之前,您是否对这个问题有过任何想法? – mah

+0

我不明白你在问什么,对不起。 “计数”是什么意思? – Mat

回答

0

这之后的变量“i”的价值简单的功能解决您的问题开始时的问题:

// z : the number of words learned during the first day 
// k : this much more we learn after every day 
// (i.e first day we learn z words, then z+k, then z+k+k etc.) 
// d : this many days we have time to learn 
// n: this many words we should learn 

bool solve(int z, int d, int k, int n) { 

    int learned_words = 0; 

    for(int i=0; i<d; i++){ 
     learned_words += z; 
     z = z+k; 
    } 

    if(n<=learned_words) { 
     return true; 
    } 
    return false; 
} 

要回答你关于厕所的问题PS,我认为以下非常简单的循环会起作用:

int n = 100; 
int z = 5; 
int k = 1; 
int d = 0; 

for(int m=0; m<n; m+=z, z+=k, d++) {} 

cout << "You need " << d << " days to learn " << n << " words"; 

这里循环将执行学习这n个单词所需的最少次数。变量d计算所需的天数,并且必须在循环之前声明。 m计算我们学到的词数。

+0

@Parvizal注意,答案应该是11天才需要学习100个单词。如果我申请给定的循环,我会得到24天。这是不正确的。 – Beckleen

+0

奇怪。我测试了我的循环,并在屏幕上打印了“需要11天才能学习100个单词”。 – Parzival

+0

@Parvizal那么,如果我只运行一个你为我写的那个,它就会起作用。但是,如果我把它放在我的代码中,它会给我24.愿你知道为什么吗? – Beckleen

1

您可以简单地计算通过以这种方式使用的用于循环的循环:

for (i=z; i<=n; i++) 
    { 


    } 

cout<< i << endl; 

你可以简单地看到环

0

尽管标题中有for loop,但没有要求在任务中循环,也没有理由在这里实际使用它(除非您仅限于整数算术)。

简单计算学习n单词所需的天数(这是简单的二次方程式)并将其与d进行比较将会容易得多。

在第一天x天期间了解到的字数(y)是: y = z * x + k * x * (x-1)/2。所以只需要解决这个公式为y = n

我会这样做:(变量ab是二次方程的系数)。

const double a = k/2.0; 
const double b = z-k/2.0; 
const double days_needed = -b + ::sqrt(b*b + 4 * a * n)/(2.0 * a); 
std::cout << (days_needed <= d ?"yes":"no") << ", you need " << ::ceil(days_needed) << "days\n";