n个1 计算复杂度 求多个数的最小公倍数 数7 求不定方程的所有解 统计求和 求佩尔方程的解 韩信点兵

Problem A: 深入浅出学算法002-n个1

Description
由n个1组成的整数能被K(K<10000)整除,n至少为多少?
Input
多组测试数据,第一行输入整数T,表示组数 然后是T行,每行输入1个整数代表K
Output
对于每组测试数据输出1行,值为n
Sample Input
1
11
Sample Output
2

#include<iostream>
using namespace std;
int main()
{
    int t,k,temp,count,ys;
    while(cin>>t)
    {
        while(t--)
        {
            temp=1;count=1;
            cin>>k;
            temp%=k;
            while(temp!=0)
            {
                temp=temp*10+1;
                temp%=k;
                count++;
            }
            cout<<count<<endl;
        }
    }
    return 0;
}

Problem B: 深入浅出学算法003-计算复杂度

Description
算法复杂度一般分为:时间复杂度、空间复杂度、编程复杂度。 这三个复杂度本身是矛盾体,不能一味地追求降低某一复杂度,否则会带来其他复杂度的增加。在权衡各方面的情况下,降低时间复杂度成为本课程学习的重点之一。 请计算下面几个程序段的复杂程度,分别用1、logn、n、nlogn、n2、n3或2^n来表示
程序片段1:
x=x+1;

程序片段2:
for(k=1;k<=n;k++)
{
x=x+1;
}

程序片段3: for(k=1,t=1;k<=n;k++) { t=t*2; for(j=1;j<=t;j++) x=x+j; } 
程序片段4: for(k=1;k<=n;k++) { for(j=1;j<=k;j++) x=x+j; } 
程序片段5: m=0; for(k=1,t=1;k<=n;k++) { t=t*2; for(j=t;j<=n;j++) m++; } 
程序片段6: m=0; for(k=1;k<=n;k++) { for(j=1;j<=n;j++) m++; } 
程序片段7: m=0; for(k=1;k<=n;k++) { for(j=1;j<=n;j++) for(i=1;i<=n;i++) m++; }

Input
多组测试数据,首先在第一行输入整数T表示提问次数 然后是n行,每行是1个整数,表示程序片段号
Output
对于每次提问,在1行输出对应程序片段对应的复杂程度(注意必须按前面提示的输出,注意大小写
Sample Input
2
1
2
Sample Output
1
n

说几句
复杂度这个东西嘛。。说难可能有一点 说简单也简单
就是外圈乘上内圈
代码实现

#include<iostream>
using namespace std;
int main()
{
    int n,a;
    while(cin>>n)
        while(n--)
        {
            cin>>a;
            switch(a)
            {
                case 1:
                    cout<<1<<endl;
                    break;
                case 2:
                    cout<<"n"<<endl;
                    break;
                case 3:
                    cout<<"2^n"<<endl;
                    break;
                case 4:
                    cout<<"n^2"<<endl;
                    break;
                case 5:
                    cout<<"nlogn"<<endl;
                    break;
                case 6:
                    cout<<"n^2"<<endl;
                    break;
                case 7:
                    cout<<"n^3"<<endl;
                    break;
            }
        }

    return 0;
}

Problem C: 深入浅出学算法004-求多个数的最小公倍数

Description
求n个整数的最小公倍数

Input
多组测试数据,先输入整数T表示组数 然后每行先输入1个整数n,后面输入n个整数k1 k2…kn

Output
求k1 k2 …kn的最小公倍数

Sample Input
1
3 12 18 6
Sample Output
36

说几句

这道题真的做到我自闭了 对不起 是我太菜
可以说错在两个点吧

自定义函数的时候千万不能直接sum=a*b
这样数据很大会直接爆掉 unsigned long long都救不回来
可以先 a/最大公约数 再乘b


在这里插入图片描述
这里ans刚开始=a[1] 然后从2开始自定义函数就没有问题
但是刚开始赋值ans=gbs(a[1],a[2]) 然后再从3开始就会wa

在这里插入图片描述
在这里插入图片描述
然后我就被教育了
我太sb了
在这里插入图片描述
刚开始加个a[2]=1 测试以下就行 真的ac了
我真的太sb了

太菜了我

ac代码

#include<stdio.h>

int gbs(int a,int b)
{
    int r=1,x=a,y=b;
    while(r!=0)
    {
        r=a%b;
        a=b;
        b=r;
    }
    return x/a*y;
}

int main()
{
    int t,n,i,a[100000],ans;
    while(scanf("%d",&t)!=EOF)
    {
        while(t--)
        {
            scanf("%d",&n);
            for(i=1;i<=n;i++)
                scanf("%d",&a[i]);
            ans=a[1];
            for(i=2;i<=n;i++)
                ans=gbs(ans,a[i]);
            printf("%d\n",ans);
        }
    }
    return 0;
}

Problem D: 深入浅出学算法005-数7

Description

逢年过节,三五好友,相约小聚,酒过三旬,围桌数七。 “数七”是一个酒桌上玩的小游戏。就是按照顺序,某人报一个10以下的数字,然后后面的人依次在原来的数字上加1,并喊出来,当然如果要喊的数包含7或者是7的倍数,那么不能直接喊,可以敲一下筷子,否则就算输,要罚酒一杯。

Input

多组测试数据,先输入整数T表示组数, 每组测试数据输入一个10以下的正整数,

Output

对于每组测试数据,输出在一行,要求从小到大输出所报数(含)到100之间所有不能喊的数字

Sample Input

1
3

Sample Output

7 14 17 21 27 28…

今天写题异常不顺 水题wa了好多 这题最后没输出换行也wa了一次

#include<iostream>
#include<cstring>
using namespace std;
int main()
{
    int t,n,i,count;
    while(cin>>t)
        while(t--)
        {
            cin>>n;count=1;
            for(i=n;i<100;i++)
                if(i%7==0 || i%10==7 || i/10==7)
                    if(count==1)    {cout<<i;count++;}
                    else    {cout<<" "<<i;}
            cout<<endl;
        }
    return 0;
}

Problem E: 深入浅出学算法006-求不定方程的所有解

Description

现有一方程ax+by=c,其中系数a、b、c均为整数,求符合条件的所有正整数解,要求按x由小到大排列,其中a b c 均为不大于1000的正整数

Input

多组测试数据,第一行先输入整数T表示组数 然后每组输入3个整数分别表示a b c

Output

对于每组数据按要求输出所有正整数解 有多个解的情况下,每对解一行,要求按照x从小到大输出 无解时输出No

Sample Input

1
1 2 3

Sample Output

1 1

代码

今晚真的不在状态 每题交上去必wa一次
反正别忘了没有输出就输出No就行了

#include<iostream>
using namespace std;
int main()
{
    int t,a,b,c,i,j,flag;
    while(cin>>t)
        while(t--)
        {
            cin>>a>>b>>c;flag=0;
            for(i=1;i<=1000;i++)
                for(j=1;j<=1000;j++)
                    if(a*i+b*j==c)
                    {cout<<i<<" "<<j<<endl;flag=1;}
            if(!flag)   cout<<"No"<<endl;
        }
    return 0;
}

Problem F: 深入浅出学算法007-统计求和

Description

求含有数字a且不能被a整除的4位整数的个数,并求这些整数的和

Input

多组测试数据,先输入整数T表示组数然后每组输入1个整数a(1<=a<=9)

Output

对于每组测试数据输出一行,每行2个数分别是个数与和

Sample Input

1
3

Sample Output

2112 10568016

终于出现一次a的水题了 太感动了

#include<iostream>
using namespace std;
int main()
{
    int t,a,i,count;
    long long sum;
    while(cin>>t)
        while(t--)
        {
            cin>>a;sum=0;count=0;
            for(i=1000;i<=9999;i++)
                if((i%10==a || i/10%10==a || i/100%10==a || i/1000==a) && i%a!=0)
                {sum+=i;count++;}
            cout<<count<<" "<<sum<<endl;
        }
    return 0;
}

Problem G: 深入浅出学算法008-求佩尔方程的解

Description

标题

求关于x y的二次不定方程的解 x2-ny2=1

Input

多组输入数据,先输入组数T 然后输入正整数n(n<=100)

Output

对于每组数据输出一行,求y<=10000的最小正整数解 ,输出y的值,如果在此范围内没有解则输出No

Sample Input
1
73

Sample Output

No

就看看n*y^2+1是不是一个数的平方

#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
int main()
{
	int t,n,a,pd,x,y;
	while(cin>>t)
    {	
    	while(t--)
    	{
    		pd=0;
    		cin>>n;
    		for(y=1;y<=10000;y++)
    		{
    			a=n*y*y;
    			x=floor(sqrt(a+1)+0.5);
    			if(x*x==a+1)
    			{
    				pd++;
    				cout<<y<<endl;
    				break;
    			}
    		}
    		if(pd==0)
    			cout<<"No"<<endl;
    	}
    }
	return 0;
}

Problem H: 深入浅出学算法009-韩信点兵

标准题解

但是提交好像没什么反应QAQ
在这里插入图片描述

发布了149 篇原创文章 · 获赞 14 · 访问量 8992

猜你喜欢

转载自blog.csdn.net/weixin_45485719/article/details/103602924