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
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章