小编Ole*_*ner的帖子

项目欧拉数45

来自Project Euler,问题45:

三角形,五边形和六边形数字由以下公式生成:

三角形T_(n)= n(n + 1)/ 2 1,3,6,10,15 ......

五角形P_(n)= n(3n-1)/ 2 1,5,12,22,35 ......

六角形H_(n)= n(2n-1)1,6,15,28,45,......

可以证实T_(285)= P_(165)= H_(143)= 40755.

找到下一个三角形和六边形的三角形数字.

这是问题所在.它非常简单明了,但问题是,当三角形数值超过int数据类型中的最大值时,我的程序会遇到一个小故障.我尝试过为其他数据类型搜索网络但没有成功.

     #include<stdio.h>
     int main(void)
     {
        int i,j,t,h,p,k;
        int n=10000;
        for(i=0;i<n;i++)
        {
            t=(i*(i+1))/2;
            for(j=0;j<n;j++)
            {   
                h=j*(2*j-1);
                if(h>t)
                break;
                if(h==t)
                {   
                    //printf("%d %d\n",h,t);
                    for(k=0;k<n;k++)
                    {
                        p=(k*(3*k-1))/2;
                        if(p>h)
                        break;
                        if(p==h)
                        {
                            printf("%d %d\n",p,i);
                            break;
                        }   
                    }   
                }

            }   
        }       
        printf("done\n");
        return(0);
     }
Run Code Online (Sandbox Code Playgroud)

c

5
推荐指数
1
解决办法
672
查看次数

项目欧拉编号37

这是问题陈述:

3797号有一个有趣的地方.作为素数本身,可以从左到右连续删除数字,并在每个阶段保持素数:3797,797,97和7.同样,我们可以从右到左工作:3797,379,37和3.

找到从左到右和从右到左都可截断的仅有的11个素数之和.

注意:2,3,5和7不被认为是可截断的素数.

我的代码给了我一个部分输出.只输出了11个所需素数中的5个或6个,其中3797个不是其中之一.所以为了找到错误,我手动(在一张纸上)运行3797的代码,并以某种方式无法找到故障.

我认为错误在第二部分,代码的一部分,检查数字是否可以从左侧截断.

码:

#include<stdio.h>
      int isprime(int n) //Checks whether the number is prime or not
      {
        int i;
        if(n==1)
        return(0);
        for(i=2;i<n/2+1;i++)
        {

            if(n%i==0)
            {
                return(0);
                break;
            }   
        }
        return(1);      
      }
      int main(void)
      {
        int count=0,z=0;
        int i;
        int n;
        int x=1;
        int reverse2=0;
        int z1=0;
        int p;
        int count1=0;
        int digit;
        int k=1000000;
        int reverse=0;
        for(i=2;i<k;i++)
        {
            if(isprime(i)==1)
            {
                n=i;
                p=i;
                while(n>0) // This function removes the digits of the prime number from the right
                { …
Run Code Online (Sandbox Code Playgroud)

c

5
推荐指数
1
解决办法
717
查看次数

C中的游戏编程,我从哪里开始?

我开始编程大约6个月,并且对如何用C编码有很好的知识.我主要用它来实现基本算法或解决Project Euler问题(现在达到50个:) :)我很久以来想要学习的东西是游戏编程.即制作简单的2D游戏,如蛇或口袋坦克.简单来说,我绝不意味着制作这些游戏需要花费大量的工作或精力

我试过在网上搜索,但没有运气.有人能指出我正确的方向吗?

我到底需要学习什么?我从哪里开始?

c

5
推荐指数
1
解决办法
5562
查看次数

Eratosthenes的筛子

我在解读关于欧拉项目的问题的同时读了Eratosthenes的筛子.我相信你们都知道我在谈论哪个问题.所以这就是事情.我的代码设法正确显示100万以下的所有素数.然而,当我尝试200万相同的实现它给我一个分段错误...我已经知道为什么错误即将到来但不知道如何纠正它...这里是100万以下的素数的代码.

#include<stdio.h>
int main(void)
{
   int i,k=2;
   int j;
   int n=1000000;
   int prime[2000000]={};
   for(i=0;i<n;i++) // initializes the prime number array
   {
      prime[i]=i;
   }
   for(i=2;i<n;i++) // Implementation of the Sieve
   {
      if(prime[i]!=0)
      { 
         for(j=2;j<n;j++)
         {
            {
               prime[j*prime[i]]=0;
               if(prime[i]*j>n)
                  break;    
            }
         }
      }
   }
   for(i=0;i<n;i++) // Prints the prime numbers
      if(prime[i]!=0)
      {
         printf("%d\n"prime[i]);
      }
      return(0);
   }
}
Run Code Online (Sandbox Code Playgroud)

c sieve sieve-of-eratosthenes

3
推荐指数
1
解决办法
1万
查看次数

SQL 左连接。花费太长时间。

好的,这是我的表模式。
我有2张桌子。说表A和表B。表A的主键是PriKeyA bigint(50),表B的主键是PriKeyB varchar(255)。PriKeyA 和 PriKeyB 都包含相同类型的数据。
这个问题需要的表A的相关字段是Last_login_date_in_A(日期),表B是主键本身。
我需要做的是,在 A 中获取那些在表 B 的 PriKeyB 列中不存在的 PriKeyA,并且 Last_login_date_in_A 列应该从当前日期起超过 30 天。基本上我需要表 A 和表 B 的差异以及某个条件(这是这个问题中的日期)
这是我的 SQL 命令

: SELECT A.PriKeyA from A  
 LEFT JOIN B ON A.PriKeyA = B.PriKeyB   
 WHERE B.PriKeyB IS NULL and DATEDIFF(CURRENTDATE,Last_login_date_in_A)>30;
Run Code Online (Sandbox Code Playgroud)

但是,当我运行这个 MySQL 命令时,它需要花费很长的时间(大约 3 小时)。表 A 的大小为 2,50,000,表 B 的大小分别为 42,000 条记录。我认为这个问题可能是因为 PriKeyA 和 PriKeyB 是不同的数据类型。所以我也在CAST(PriKeyB as unsigned)查询中使用了。但这也不起作用。性能略有提高。

可能的问题是什么?我以前使用过左连接,他们从来没有用过这么长时间。

mysql sql join primary-key left-join

1
推荐指数
1
解决办法
1万
查看次数

C中的分段故障仅包含某些输入

好的,所以我正在尝试解决背包问题.

在小输入情况下,程序运行没有问题并提供最佳解决方案,但是当输入大小很大,或者输入文件中的数字变大时,程序会给我一个分段错误.我不明白为什么会发生这种情况,因为INT的最大值也超过了这些数字中的任何一个.

这是我的代码.

    #include<stdio.h>
    #include<stdlib.h>
    int main(void)
    {
        int W,n,i,j,k ;
        scanf("%d %d",&W,&n); // capacity of knapsack and number of total items
        int value[n+1],weight[n+1];
        int** A;
        A = (int **)malloc((n+1)*sizeof(int*));
        for(i=0;i<W+1;i++)
            A[i]=(int *)malloc(sizeof(int)*(W+1));
        for(i=1;i<n+1;i++)
        {
            scanf("%d %d",&value[i],&weight[i]); //taking value and weight of each item
        }
        for(i=0;i<W+1;i++)
            A[0][i]=0;
        for(i=0;i<n+1;i++)
            A[i][0]=0;
        for(i=1;i<n+1;i++)
        {   
            for(j=1;j<W+1;j++)
            {
                if(j-weight[i]<0)
                {
                    A[1][j]=A[0][j];
                }
                else
                {
                    if(A[0][j]>A[0][j-weight[i]]+value[i])
                        A[1][j]=A[0][j];
                    else
                        A[1][j]=A[0][j-weight[i]]+value[i];
                }
            }
            for(k=0;k<W+1;k++)
                A[0][k]=A[1][k];
        }   
        int max=0;
        i=1;
        for(i=0;i<2;i++)
            for(j=0;j<W+1;j++)
            {
                if(A[i][j]>max)
                    max=A[i][j];
            }
        printf("%d\n",max);
        return(0);
    } …
Run Code Online (Sandbox Code Playgroud)

c algorithm malloc knapsack-problem data-structures

0
推荐指数
1
解决办法
189
查看次数

给出n个点,最大化三角形的面积

当我随意地将参数传递给区域函数时,代码运行完美.但是当我尝试运行循环时,给我一个分段错误.给定n <100

这是我的代码.

#include<stdio.h>
#include<math.h>
double area(int x,int y,int x1,int y1,int x2,int y2)
{       //Heron's formula
    double a,b,c,s;
    double abc;
    a=sqrt(((x-x1)*(x-x1))+((y-y1)*(y-y1)));
    b=sqrt(((x-x2)*(x-x2))+((y-y2)*(y-y2)));
    c=sqrt(((x2-x1)*(x2-x1))+((y2-y1)*(y2-y1)));
    s=(a+b+c)/2;
    abc=sqrt(s*(s-a)*(s-b)*(s-c));
    return(abc);
}
int main(void)
{   

    int n,i,j,k;
    double max=0,z=0;
    scanf("%d",&n);
    int x[100]={},y[100]={};
    for(i=0;i<n;i++)
    {
        scanf("%d %d",&x[i],&y[i]);
    }
    for(i=0;i<n;i++)
    {
        for(j=i+1;j<n;j++)
        {
            for(k=j+1;k<n;j++)
            {
                z=area(x[i],y[i],x[j],y[j],x[k],y[k]);
                printf("%lf\n",z);
                if(z>max)
                {
                    max=z;
                }
            }
        }
    }
    //printf("\n%lfoi\n",area(0,0,1,0,1,2));
    printf("%lf",max*2);

}
Run Code Online (Sandbox Code Playgroud)

c geometry area maximize

-1
推荐指数
1
解决办法
877
查看次数