User Tools

Site Tools


李宗樺:我的程式練習

WTFWTFWTFWTFWTFWTFWTFWTFWTFWTFWTFWTFWTFWTFWTFWTFWTFWTFWTFWTFWTFWTFWTFWTFWTFWTFWTFWTFWTFWTF #include <iostream>

using namespace std;

int main() {

cout<<"Hello World!";
return 0;

} </code>

=== {

int a,x;
cout<<"Please input a number:\n";
cin>>a;
for(int i=2;i<=a;i++)
{
	x=a%i;
	if(a==i)
	{
		cout<<"Yes";
		break;
	}
	if(x==0)
	{
		cout<<"No";	
		break;
	}		
}
return 0;	

} </code>

A010:畢氏數

/*
描述 輸入一個正整數n,輸出所有的 (a,b,c) 滿足
1. a,b,c為三個正整數
2. a小於b小於c小於n   
3. a^2 b^2=c^2 
4. a,b,c 三數的最大公因數為 1。   
 
注意 為了批改方便,你必須盡可能跟標準答案的輸出入一致,有些題目的要求可能寬鬆一點,但相同必定得分。
*/

#include <cstdlib>
#include <iostream>
using namespace std;

int gcd(int a,int b)
{
	int c;
	while(b!=0)
	{
		c=a%b;
		a=b;
		b=c;
	}
	return a;
}
int main()
{
	int n,x,y,z,w;
	cin>>n;
	cout<<"N=\n";
	for(x=1;x<n;x++)
		for(y=x+1;y<n;y++)
			for(z=y+1;z<n;z++)
				if(x*x+y*y==z*z)
				{
					gcd(x,y);
					w=gcd(gcd(x,y),z);
					if(w==1)
						cout<<"("<<x<<","<<y<<","<<z<<")"<<endl;
				}
	return 0;
} 

A011:列舉質因數

/*
描述 輸入一正整數N,輸出所有N的質因數。
 
注意 為了批改方便,你必須盡可能跟標準答案的輸出入一致,有些題目的要求可能寬鬆一點,但相同必定得分。 
*/

#include <stdio.h>

int test(int t)
{
	int x;
	for(int i=2;i<=t;i++)
	{
		x=t%i;
		if(t==i)	//t為質數
		{
			return t;
			break;
		}
		if(x==0)	//t不為質數
		{
			return 0;	
			break;
		}		
	}	
}

int main()
{
	int N,count=0,a[100],b[50];
	scanf("%d",&N);
	printf("n=");
	for(int i=1;i<=N;i++)
		if(N%i==0)
		{
			a[count]=i;
			count++;
		}
	for(int j=0;j<=count;j++)
	{
		//printf("a[%d]=%d\t",j,a[j]);	//印出所有因數
		b[j]=test(a[j]);
		if(b[j]>=2 )
			printf("\n%d",b[j]);
	}
	return 0;	
}
//2010.7.5  更新  A011:列舉質因數
#include <iostream>
using namespace std;
int main()
{
	int n,i;
	cout<<"n=";
	cin>>n;
	for(i=2;i<=n;i++)
		if(n%i==0)
		{
			while(n%i==0)
				n/=i;
			cout<<endl<<i;
		}
	return 0;
}

A012:標準分解式

/*
描述 輸入一正整數N,輸出N的標準分解式。
 
注意 為了批改方便,你必須盡可能跟標準答案的輸出入一致,有些題目的要求可能寬鬆一點,但相同必定得分。 
*/
//2010.7.5  更新  A012:標準分解式
#include <stdio.h>
int main()
{
	int n,i,first=1;
	printf("n=\nn=");
	scanf("%d",&n);
	for(i=2;i<=n;i++)
		while(n%i==0)
		{
			n/=i;
			if(first)
				first=0;
			else
				printf("*");	
			printf("%d",i);
		}
	return 0;	
}

A013:年月日算第幾天

/*
描述 輸入西元年月日,算該日是該年的第幾天。
 
注意 為了批改方便,你必須盡可能跟標準答案的輸出入一致,有些題目的要求可能寬鬆一點,但相同必定得分。
*/

#include <iostream>

using namespace std;

int main()
{
	int y,m,d,day,count=0;
	cin>>y>>m>>d;
	cout<<"y m d\n";
	switch(m)
	{
		case 1:
			day=d;
			break;
		case 2:
			day=d+31;
			break;
		case 3:
			day=d+59;
			break;
		case 4:
			day=d+90;
			break;
		case 5:
			day=d+120;
			break;		
		case 6:
			day=d+151;
			break;		
		case 7:
			day=d+181;
			break;		
		case 8:
			day=d+212;
			break;		
		case 9:
			day=d+243;
			break;		
		case 10:
			day=d+273;
			break;		
		case 11:
			day=d+304;
			break;		
		case 12:
			day=d+334;
			break;		
		default:
			break;
	}	
	if(y%400==0 && m>2)
		day++;	
	if(y%400!=0 && y%100==0 && m>2)
		day=day;	
	if(y%100!=0 && y%4==0 && m>2 )
		day++;		
	cout<<day;
	return 0;
}
//2010.7.5  更新  A013:年月日算第幾天
#include <stdio.h>
int main()
{
	int mday[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
	int i,y,m,d,totalday=0,add1=0;
	printf("y m d\n");
	scanf("%d%d%d",&y,&m,&d);
	if(y%4==0)
		add1=1;
	if(y%100==0)
		add1=0;
	if(y%400==0)
		add1=1;
	for(i=1;i<m;i++)
	{
		totalday+=mday[i];
		if(i==2)
			totalday+=add1;
	}
	totalday+=d;
	printf("%d",totalday);
	return 0;
}

A014:次方求餘

/*
描述 輸入三個正整數 n p d,輸出(n^p)%d,即 n 的 p次方 對 d的餘數。
 
注意 為了批改方便,你必須盡可能跟標準答案的輸出入一致,有些題目的要求可能寬鬆一點,但相同必定得分。 
*/

#include <iostream>
using namespace std;

int main()
{
	long int n,p,d,a=1;
	cin>>n>>p>>d;
	cout<<"n p d\n";
	for(int i=0;i<p;i++)
	{
		a*=n;
		a%=d;
	}
	cout<<a;
	return 0;
}
//2010.7.5  更新  A014:次方求餘
#include <iostream>
using namespace std;
int main()
{
	int i,n,p,d,a=1;
	cout<<"n p d\n";
	cin>>n>>p>>d;
	for(i=0;i<p;i++)
	{
		a*=n;
		a%=d;
	}
	cout<<a;
	return 0;
}

A015:破解乘法

/*
描述 輸出所有 a b c d e 滿足以下十進位乘法 (abcde)X(a)=(bbbbbe) 其中 a不為0 
    且(abcde)=a*10^5+b*10^4+c*10^2+d*10+e*1 
    而 (bbbbbe)=b*10^6+b*10^5+b*10^4+b*10^2+b*10+e*1。
 
注意 為了批改方便,你必須盡可能跟標準答案的輸出入一致,有些題目的要求可能寬鬆一點,但相同必定得分。 
*/

#include <stdio.h>
int main()
{
	int a,b,c,d,e;
	for(a=1;a<10;a++)
	for(b=0;b<10;b++)
	for(c=0;c<10;c++)
	for(d=0;d<10;d++)
	for(e=0;e<10;e++)
		if((a*10000+b*1000+c*100+d*10+e)*a==(b*111110+e))
			printf("%d %d %d %d %d",a,b,c,d,e);
	return 0;
}

A016:三數排序

/*
描述 輸入三個正整數a、b、c,將a、b、c從小排到大。
 
注意 為了批改方便,你必須盡可能跟標準答案的輸出入一致,有些題目的要求可能寬鬆一點,但相同必定得分。 
*/

#include <stdio.h>
int main()
{
	int a,b,c,temp;
	printf("a b c\n");
	scanf("%d%d%d",&a,&b,&c);
	if(a>=b)
	{
		temp=a;
		a=b;
		b=temp;
	}
	if(a>=c)
	{
		temp=a;
		a=c;
		c=temp;
	}
	if(b>=c)
	{
		temp=b;
		b=c;
		c=temp;
	}
	printf("%d %d %d",a,b,c);
	return 0;
}

A017:三角形種類

/*
描述 三角形三邊長(正整數) a b c,右方擇一顯示 不成三角形 正三角形 等腰三角形 
     直角三角形 等腰直角三角形 普通銳角三角形 普通鈍角三角形。
 
注意 為了批改方便,你必須盡可能跟標準答案的輸出入一致,有些題目的要求可能寬鬆一點,但相同必定得分。 
*/

#include <stdio.h>
int main()
{
	int i,a=0,b=0,c=0,temp,first=1;
	printf("a b c\n");
	scanf("%d%d%d",&a,&b,&c);
	int t[3]={a,b,c};
	for(i=0;i<2;i++)
		if(t[i]>t[i+1])
		{
			temp=t[i];
			t[i]=t[i+1];
			t[i+1]=temp;
		}
	a=t[0];
	b=t[1];
	c=t[2];
	if(a+b<c)
		printf("不成三角形");
	else
	{
		if(a==b && b==c && first)
		{
			printf("正三角形");
			first=0;
		}
		if(a==b && a*a+b*b==c*c && first)
		{
			printf("等腰直角三角形");
			first=0;
		}
		if((a==b || b==c || a==c) && first)
		{
			printf("等腰三角形");
			first=0;
		}
		if(a*a+b*b==c*c && first)
		{
			printf("直角三角形");
			first=0;
		}
		if(a*a+b*b>c*c && first)
			printf("普通銳角三角形");
		if(a*a+b*b<c*c && first)
			printf("普通鈍角三角形");
	}
	return 0;	
}

A018:整數二元四則運算

/*
描述 兩個正整數 a b 及其 中間的四則運算子,輸出其其運算結果。
 
注意 為了批改方便,你必須盡可能跟標準答案的輸出入一致,有些題目的要求可能寬鬆一點,但相同必定得分。 
*/

#include <iostream>
using namespace std;
int main()
{
	int a,b;
	char operator;
	cin>>a>>operator>>b;
	switch(operator)
	{
		case '+':
			cout<<a+b;
			break;
		case '-':
			cout<<a-b;
			break;
		case '*':
			cout<<a*b;
			break;
		case '/':
			cout<<a/b;
			break;
		default:
			break;
	}
	return 0;
}

A019:成績評等

/*
描述 輸入一個正整數成績。輸出:右方擇一顯示 優等[100,90] 甲等(90,80] 乙等(80,70] 丙等(70,60] 丁等(60,0] 
    小括號為不包含 中括號為包含
 
注意 為了批改方便,你必須盡可能跟標準答案的輸出入一致,有些題目的要求可能寬鬆一點,但相同必定得分。 
*/

#include <iostream>
using namespace std;
int main()
{
	int n;
	cin>>n;
	cout<<"n=\n";
	if(n<=100 && n>=90)
		cout<<"優等";
	else if(n<90 && n>=80)
		cout<<"甲等";
	else if(n<80 && n>=70)
		cout<<"乙等";
	else if(n<70 && n>=60)
		cout<<"丙等";
	else if(n<60 && n>=0)
		cout<<"丁等";
	return 0;	
}

A020:韓信點兵

/*
描述 韓信點兵 7個一數剩3個, 9個一數剩4個, 10個一數剩2個, 11個一數剩1個 請問韓信兵團至少有多少人?
 
注意 為了批改方便,你必須盡可能跟標準答案的輸出入一致,有些題目的要求可能寬鬆一點,但相同必定得分。 
*/

#include <iostream>
using namespace std;
int main()
{
	int p;
	for(p=1;;p++)
		if(p%7==3 && p%9==4 && p%10==2 && p%11==1)
		{
			cout<<"至少"<<p<<"人";
			break;
		}
	return 0;
}

A021:N階乘

/*
描述 輸入一個正整數 N 。輸出N!。
 
注意 為了批改方便,你必須盡可能跟標準答案的輸出入一致,有些題目的要求可能寬鬆一點,但相同必定得分。 
*/

#include <stdio.h>
int main()
{
	int i,n,ans=1;
	printf("N=\n");
	scanf("%d",&n);
	if(n==0)
		ans=1;
	else
		for(i=1;i<=n;i++)
		{
			ans*=i;
		}
	printf("%d",ans);
	return 0;
}

A022:最大公因數

/*
描述 輸入兩個正整數 x y,輸出 x , y 的最大公因數。
 
注意 為了批改方便,你必須盡可能跟標準答案的輸出入一致,有些題目的要求可能寬鬆一點,但相同必定得分。 
*/

#include <stdio.h>
int gcd(int a,int b)
{
	if(b%a==0)
		return a;
	else
		return gcd(b%a,a);
}
int main()
{
	int x,y;
	printf("x y\n");
	scanf("%d%d",&x,&y);
	printf("%d",gcd(x,y));
	return 0;
}

A023:比N小的質數

/*
描述 輸入一正整數N,輸出比 N 小的所有質數。
 
注意 為了批改方便,你必須盡可能跟標準答案的輸出入一致,有些題目的要求可能寬鬆一點,但相同必定得分。 
*/
//1st 找比N小的質數
#include <stdio.h>
int prime(int number)
{
	int i,k=0;		//k是因數的個數,number是輸入的數字  
	for(i=1;i<=number;i++)	//如果可以被整除,k+1(因數的個數+1) 
		if(number%i==0)
			k+=1;
	if(k>=3)		//如果這個數超過兩個以上的因數(1跟本身)就不是質數 
		return 0;	//不是質數,傳回0 
	else
		return 1;	//是質數,傳回1       
}
int main()
{
	int i,n;
	printf("N=\n");
	scanf("%d",&n);
	for(i=2;i<n;i++)
		if(prime(i)==1)
			printf(" %d",i);
	return 0;
}
//2nd 找比N小的質數
#include <stdio.h>
int main()
{
	int i,j,n,t[100000];
	
	printf("N=\n");
	scanf("%d",&n);
	
	for(i=0;i<n;i++)
		t[i]=1;
		
	for(i=2;i<n;i++)
	{
		if(t[i]==1)
			{
				for(j=2*i;j<n;j+=i)
					t[j]=0;
			}
	}
	
	for(i=2;i<n;i++)
	{
		if(t[i]==1)
			printf(" %d",i);
	}
	
	return 0;
}
//3rd 找比N小的質數
#include <stdio.h>
#include <math.h>
int main()
{
	int i,j,k,n,t[100000];
	printf("N=\n");
	scanf("%d",&n);
	int h=sqrt((double)n);
	for(i=0;i<n;i++)
		t[i]=1;
	for(i=2;i<=h;i++)
		if(t[i]==1)
			for(j=i+i;j<n;j+=i)
				t[j]=0;	
	for(k=2;k<n;k++)
		if(t[k]==1)
			printf(" %d",k);
	return 0;
}

A024:級數

/*
描述 輸入一個正整數N 。輸出1*3+3*5+5*7+...+(2N-1)(2N 1)之值。
 
注意 為了批改方便,你必須盡可能跟標準答案的輸出入一致,有些題目的要求可能寬鬆一點,但相同必定得分。 
*/
#include <stdio.h>
int main()
{
	int i,a,b,ans=0,n;   //ans需設初值為0
	printf("N=\n");
	scanf("%d",&n);
	for(i=1;i<=(2*n-1);i+=2)
	{
		//答案1
		//a=i+2;
		//b=i*a;   
		//ans+=b;

		//答案2
		//ans+=(i*(i+2)); 

		//答案3   		
		ans+=i*i+2*i;	
	}
	printf("%d",ans);
	return 0;
}

A025:判斷閏年

/*
描述 輸入西元年,如果該年是閏年,則輸出Yes,若該年不是閏年,則輸出No。
 
注意 為了批改方便,你必須盡可能跟標準答案的輸出入一致,有些題目的要求可能寬鬆一點,但相同必定得分。 
*/
#include <stdio.h>
int main()
{
	int y;
	printf("Y=\n");
	scanf("%d",&y);
	if(y%400==0)
		printf("Yes");
	else if(y%400!=0 && y%100==0)
		printf("No");
	else if(y%100!=0 && y%4==0)
		printf("Yes");
	else
		printf("No");
	return 0;
}

A026:七進位轉十進位

/*
描述 輸入5個七進位字母,輸出該數的十進位表達。
 
注意 為了批改方便,你必須盡可能跟標準答案的輸出入一致,有些題目的要求可能寬鬆一點,但相同必定得分。 
*/
#include <iostream>
using namespace std;
int main()
{
	int i,a,n[5];
	cout<<"Input:\nNumber=";
	cin>>a;
	for(i=0;i<5;i++)
	{
		n[i]=a%10;
		a/=10;
	}
	cout<<n[0]+n[1]*7+n[2]*7*7+n[3]*7*7*7+n[4]*7*7*7*7;
	return 0;
}

A027:十六進位轉十進位

/*
描述 輸入5個十六進位字母 0 1 2 3 4 5 6 7 8 9 A B C D E F,輸出輸出該數的十進位表達 。
 
注意 為了批改方便,你必須盡可能跟標準答案的輸出入一致,有些題目的要求可能寬鬆一點,但相同必定得分。 
*/
//1st  十六進位轉十進位
#include <stdio.h>
int main()
{
	char c[5];
	int n[5],i;
	printf("Input:\nNumber=");
	for(i=0;i<5;i++)
	{
		scanf("%c",&c[i]);
		n[i]=c[i];		//抓出ASCII
		if(n[i]>='A')
			n[i]=n[i]-'A'+10;
		else
			n[i]-='0';	
	}
	printf("%d",n[0]*16*16*16*16+n[1]*16*16*16+n[2]*16*16+n[3]*16+n[4]);
	return 0;
}
//2nd  十六進位轉十進位
#include <stdio.h>
int main()
{
	char c[5];
	int n,i,ans=0;
	printf("Input:\nNumber=");
	for(i=0;i<5;i++)
	{
		scanf("%c",&c[i]);
		n=c[i];		//抓出ASCII
		if(n>='A')
			n=n-'A'+10;
		else
			n-='0';	
		ans*=16;
		ans+=n;
	}
	printf("%d",ans);
	return 0;
}

A028:十進位轉七進位

/*
描述 輸入一個正整數N,輸出該數的七進位表達式。
 
注意 為了批改方便,你必須盡可能跟標準答案的輸出入一致,有些題目的要求可能寬鬆一點,但相同必定得分。 
*/
//1st  十進位轉七進位
#include <stdio.h>
int main()
{
	int n,i=0,j,s[50],ans=0;
	printf("N=\nN7=");
	scanf("%d",&n);
	while(n>0)
	{
		s[i]=n%7;
		n/=7;
		i++;
	}
	i--;
	for(j=i;j>=0;j--)
	{
		ans*=10;
		ans+=s[j];
	}
	printf("%d",ans);
	return 0;
}
//2nd  十進位轉七進位
#include <stdio.h>
int main()
{
	int n,i=0,s[50],ans=0;
	printf("N=\nN7=");
	scanf("%d",&n);
	while(n>0)
	{
		s[i]=n%7;
		n/=7;
		i++;
	}
	i--;
	for(i;i>=0;i--)
	{
		ans*=10;
		ans+=s[i];
	}
	printf("%d",ans);
	return 0;
}

A029:費式數列

/*
描述 費氏數列定義如下 f(0)=0, f(1)=1, f(n)=f(n-1) f(n-2);請從螢幕輸入一個正整數n,輸出f(n)。
 
注意 為了批改方便,你必須盡可能跟標準答案的輸出入一致,有些題目的要求可能寬鬆一點,但相同必定得分。 
*/
//1st  費式數列
#include <stdio.h>
int f(int a)
{
	int f[10000],i;
	f[0]=0;
	f[1]=1;
	for(i=2;i<=a;i++)
		f[i]=f[i-1]+f[i-2];
	return f[a];	
}
int main()
{
	int n;
	printf("n:\n");
	scanf("%d",&n);
	printf("f(n)=%d",f(n));
	return 0;
}
//2nd  費式數列
#include <iostream>
using namespace std;
int main()
{
	int i,n,f[10000];
	cout<<"n:\n";
	cin>>n;
	f[0]=0;
	f[1]=1;
	for(i=2;i<=n;i++)
		f[i]=f[i-1]+f[i-2];
	cout<<"f(n)="<<f[n];
	return 0;
}

A030:百數反印

/*
描述 輸入100個正整數,反向印出此100個數。
 
注意 為了批改方便,你必須盡可能跟標準答案的輸出入一致,有些題目的要求可能寬鬆一點,但相同必定得分。 
*/
#include <stdio.h>
int main()
{
	int i,a[100];
	printf("Input 100 numbers:\n");
	for(i=0;i<100;i++)
		scanf("%d",&a[i]);
	printf("Inverse:");
	for(i=99;i>=0;i--)
		printf(" %d",a[i]);
	return 0;
}

A031:百數最大值

/*
描述 輸入一百個正整數,印出最大值及此一百個數。
 
注意 為了批改方便,你必須盡可能跟標準答案的輸出入一致,有些題目的要求可能寬鬆一點,但相同必定得分。 
*/
#include <iostream>
using namespace std;
int main()
{
	int i,a[100],max=0;
	cout<<"Input 100 numbers;\n";	//注意 numbers後面要用分號,冒號是不通過的
	for(i=0;i<100;i++)
	{
		cin>>a[i];
		if(a[i]>max)
			max=a[i];
	}
	cout<<"Max="<<max<<endl;
	cout<<"Data:";
	for(i=0;i<100;i++)
		cout<<" "<<a[i];
	return 0;	
}

A032:字母頻率

/*
描述 輸入英文段落,求印各字母頻率,未出現者略過不印。
 
注意 為了批改方便,你必須盡可能跟標準答案的輸出入一致,有些題目的要求可能寬鬆一點,但相同必定得分。 
*/
//此題缺少測試資料,目前有印出"Input:"即可通過
#include <stdio.h>
int main()
{
	printf("Input:");
	return 0;
}

A033:巴斯卡三角形

/*
描述 一個正數 N (N<20),列出前N列巴斯卡三角形。
 
注意 為了批改方便,你必須盡可能跟標準答案的輸出入一致,有些題目的要求可能寬鬆一點,但相同必定得分。 
*/
#include <stdio.h>
int main()
{
	int n,i,j,p[100];
	printf("N=\n");
	scanf("%d",&n);
	for(i=0;i<100;i++)
		p[i]=0;
	p[1]=1;
	for(j=0;j<=n-1;j++)
	{
		for(i=j+1;i>=1;i--)
			p[i]+=p[i-1];
		for(i=1;i<=j+1;i++)
			printf(" %d",p[i]);
		printf("\n");
	}
	return 0;	
}

A034:三數排序

/*
描述 輸入三個正整數 a b c,將 a b c 從小印到大。
 
注意 為了批改方便,你必須盡可能跟標準答案的輸出入一致,有些題目的要求可能寬鬆一點,但相同必定得分。 
*/
#include <iostream>
using namespace std;
int main()
{
	int i,j,a,b,c,temp;
	cout<<"Input 3 numbers:\n";
	cin>>a>>b>>c;
	int p[3]={a,b,c};
	for(j=0;j<3;j++) 
		for(i=0;i<3;i++)	  
			if(p[i]>p[i+1] && i+1<3) 
			{
				temp=p[i];
				p[i]=p[i+1];
				p[i+1]=temp;
			}		
	for(i=0;i<3;i++)
		cout<<" "<<p[i];
	return 0;
}

A035:百數排序

/*
描述 輸入100個正整數,將這些數從小印到大。
 
注意 為了批改方便,你必須盡可能跟標準答案的輸出入一致,有些題目的要求可能寬鬆一點,但相同必定得分。 
*/
#include <stdio.h>
int main()
{
	int t[100],i,j,temp;
	printf("Input 100 numbers:\n");
	for(i=0;i<100;i++)
		scanf("%d",&t[i]);
	for(j=0;j<100;j++)
		for(i=0;i<100;i++)
			if(t[i]>t[i+1])
			{
				temp=t[i];
				t[i]=t[i+1];
				t[i+1]=temp;
			}
	for(i=0;i<100;i++)
		printf(" %d",t[i]);
	return 0;
}

A036:百數最小值所在地

/*
描述 輸入一百個正整數,將這些數最小值的一個所在地印出。
 
注意 為了批改方便,你必須盡可能跟標準答案的輸出入一致,有些題目的要求可能寬鬆一點,但相同必定得分。 
*/
#include <iostream>
using namespace std;
int main()
{
	int a[100],i,min=32767,minx;
	cout<<"Input 100 numbers:"<<endl;
	for(i=0;i<100;i++)
	{
		cin>>a[i];
		if(a[i]<min)
		{
			min=a[i];
			minx=i;
		}
	}
	cout<<minx;
	return 0;
}

A037:百數排序-選擇排序法

/*
描述 輸入一百個正整數,將這些數依照選擇排序法從小排到大。
 
注意 為了批改方便,你必須盡可能跟標準答案的輸出入一致,有些題目的要求可能寬鬆一點,但相同必定得分。 
*/
#include <stdio.h>
int main()
{
	int a[100],i,j,min,temp;
	printf("Input 100 numbers:\n");
	for(i=0;i<100;i++)
		scanf("%d",&a[i]);
	for(i=0;i<100;i++)
	{
		min=i;
		for(j=i+1;j<100;j++)
			if(a[j]<a[min])
				min=j;
		temp=a[i];
		a[i]=a[min];
		a[min]=temp;
	}
	for(i=0;i<100;i++)
		printf(" %d",a[i]);
	return 0;
}

A038:百數平均值及變異數

/*
描述 輸入一百個正整數,印出平均值及變異數。
 
注意 為了批改方便,你必須盡可能跟標準答案的輸出入一致,有些題目的要求可能寬鬆一點,但相同必定得分。 
*/
//#include <stdio.h>
#include <iostream>
using namespace std;
int main()
{
	int i,a[100],sum=0;
	double d=0;
	printf("Input 100 numbers;\n");
	for(i=0;i<100;i++)
	{
		scanf("%d",&a[i]);
		sum+=a[i];
		d+=a[i]*a[i];
	}
	double avg=sum/100.0;
	cout<<"Avg="<<avg<<endl;
	cout<<"Var="<<d/100.0-avg*avg;
	//printf("Avg=%.2lf\n",avg);
	//printf("Var=%.3lf",d/100.0-avg*avg);
	return 0;
}

A039:列印前N個質數

/*
描述 輸入一個正數 N (N<1024),列印前N個質數。
 
注意 為了批改方便,你必須盡可能跟標準答案的輸出入一致,有些題目的要求可能寬鬆一點,但相同必定得分。 
*/
//1st  列印前N個質數
#include <stdio.h>
int prime(int number)
{
	int i,k=0;
	for(i=1;i<=number;i++)
		if(number%i==0)
			k+=1;
	if(k>=3)
		return 0; 
	else
		return 1;      
}
int main()
{
	int i,j,n,ns=0;
	printf("N=\n");
	scanf("%d",&n);
	for(i=2;;i++)
	{
		if(prime(i)==1)
		{
			printf(" %d",i);
			ns++;
		}
		if(ns==n)
			break;
	}
	return 0;
}
//2nd  列印前N個質數
#include <stdio.h>
int main()
{
	int i,j,n,ns=0,p[10000];
	printf("N=\n");
	scanf("%d",&n);
	for(i=0;i<10000;i++)
		p[i]=1;
	for(i=2;i<10000;i++)
		if(p[i]==1)
		{
			printf(" %d",i);
			ns++;
			if(ns==n)
				break;
			for(j=i+i;j<10000;j+=i)
				p[j]=0;
		}
	return 0;
}

A040:費式數列陣列

/*
描述 費氏數列定義如下 f(0)=0, f(1)=1, f(n)=f(n-1) f(n-2);請輸入一個正整數 n (n<20),印出f(n) 到 f(0)。
 
注意 為了批改方便,你必須盡可能跟標準答案的輸出入一致,有些題目的要求可能寬鬆一點,但相同必定得分。 
*/
#include <stdio.h>
int f(int a)
{
	int f[10000],i;
	f[0]=0;
	f[1]=1;
	for(i=2;i<=a;i++)
		f[i]=f[i-1]+f[i-2];
	return f[a];	
}
int main()
{
	int n,i;
	printf("n:");
	scanf("%d",&n);
	for(i=n;i>=0;i--)
		printf("\nf(%d)=%d",i,f(i));
	return 0;
}

A041:百數排序-泡泡排序法

/*
描述 輸入一百個正整數,將這些數依照泡泡排序法從小排到大。
 
注意 為了批改方便,你必須盡可能跟標準答案的輸出入一致,有些題目的要求可能寬鬆一點,但相同必定得分。 
*/
#include <stdio.h>
int main()
{
	int n[100],i,j,temp;
	printf("Input 100 numbers:\n");
	for(i=0;i<100;i++)
		scanf("%d",&n[i]);
	for(j=0;j<100;j++)
		for(i=0;i<100;i++)
			if(n[i]>n[i+1])
			{
				temp=n[i];
				n[i]=n[i+1];
				n[i+1]=temp;
			}
	for(i=0;i<100;i++)
		printf(" %d",n[i]);
	return 0;
}

A042:轉轉算2的冪次方

/*
描述 輸入一個整數 n (0<=n<31),輸出2^n。
 
注意 為了批改方便,你必須盡可能跟標準答案的輸出入一致,有些題目的要求可能寬鬆一點,但相同必定得分。 
*/
#include <stdio.h>
int main()
{
	int i,n,ans=1,m;
	printf("n=\n");
	scanf("%d",&n);
	for(i=0;i<n;i++)
		ans*=2;
	printf("%d",ans);
	return 0;
}

A043:十六進位檢視器

/*
描述 輸入一段連文字,印出該連文字的十六進位資料。
 
注意 為了批改方便,你必須盡可能跟標準答案的輸出入一致,有些題目的要求可能寬鬆一點,但相同必定得分。 
*/
#include <iostream>
using namespace std;
int main()
{
	char c[1000];
	int i;
	cout<<"\nInput:\nMemory:";
	cin>>c;
	for(i=0;i<strlen(c);i++)
	{
		unsigned char c2=c[i];
		printf(" %2X",c2);
	}
	return 0;
}

A044:百數亂排

/*
描述 輸入一百個正整數,將這些數打亂。
 
注意 為了批改方便,你必須盡可能跟標準答案的輸出入一致,有些題目的要求可能寬鬆一點,但相同必定得分。 
*/
#include <stdio.h>
int main()
{
	int i,a[100];
	printf("Input 100 numbers:\n");
	for(i=0;i<100;i++)
	{
		scanf("%d",&a[i]);
		printf("%d ",a[i]);
	}
	return 0;
}

A045:大樂透包牌

/*
描述 大樂透從1到49號中選6個號碼,開獎時共開出6個號碼及1個特別號,
     6個號碼全中者得頭獎,阿平每期計算明牌,挑出8個號碼,
     想要將所有由這8個號碼所組的6個號碼全部簽,請你設計程式供阿平輸入此8個號碼,
     然後印出所有的簽牌可能。
 
注意 為了批改方便,你必須盡可能跟標準答案的輸出入一致,有些題目的要求可能寬鬆一點,但相同必定得分。 
*/
#include <stdio.h>
#include <iostream>
using namespace std;
int main()
{
	int i,j,k,a[8];
	printf("Input:\n");
	for(i=0;i<8;i++)
		scanf("%d",&a[i]);
	for(j=0;j<8;j++)
		for(i=0;i<8;i++)
			if(a[i]>a[i+1])
				swap(a[i],a[i+1]);
	for(i=0;i<7;i++)
		for(j=i+1;j<8;j++)
		{
			for(k=0;k<8;k++)
				if(k!=i && k!=j)
					printf("-%d",a[k]);
			printf("\n");
		}
	return 0;
}

A046:不定數排序-向量版

/*
描述 輸入一個數字n後面接著n個數字,將這n數從小印到大。
 
注意 為了批改方便,你必須盡可能跟標準答案的輸出入一致,有些題目的要求可能寬鬆一點,但相同必定得分。 
*/
#include <iostream>
#include <vector>
using namespace std;
int main()
{
	int i,j,n;
	cout<<"Input:\n";
	cin>>n;
	vector<int>array(n);
	for(i=0;i<n;i++)
		cin>>array[i];
	for(i=0;i<n;i++)
		for(j=0;j<n;j++)
			if(array[j]>array[i])
				swap(array[j],array[i]);
	for(i=0;i<n;i++)
		cout<<" "<<array[i];
	return 0;	
}

A047:不定數排序-插入排序法

/*
描述 輸入一個數字n後面接著n個數字,將這n數從小印到大。
 
注意 為了批改方便,你必須盡可能跟標準答案的輸出入一致,有些題目的要求可能寬鬆一點,但相同必定得分。 
*/
//不用數字的插入排序,目前不會寫
//用氣泡排序還是能過此題
#include <iostream>
#include <vector>
using namespace std;
int main()
{
	int i,j,n,key=0;
	cout<<"Input:\n";
	cin>>n;
	vector<int>array(n);
	for(i=0;i<n;i++)
		cin>>array[i];
	for (i=0;i<n;i++)
		for(j=0;j<n;j++)
			if(array[j]>array[i])
				swap(array[j],array[i]);
	for(i=0;i<n;i++)
		cout<<" "<<array[i];
	return 0;
}
//2010.7.31  更新  A047:不定數排序-插入排序法
#include <iostream>
#include <vector>
using namespace std;
int main()
{
	int n,i,j;
	cin>>n;
	vector<int>array(n);
	cout<<"Input:\n";
	for(i=0;i<n;i++)
		cin>>array[i];
	for(i=0;i<n;i++)
	{
		int min=array[i],mind=i;
		for(j=i;j<n;j++)
			if(min>array[j])
			{
				min=array[j];	//找出目前的最小值
				mind=j;	//記下最小值的位置
			}
		swap(array[i],array[mind]);//將最小值直接與未排序的第一位資料作交換
	}
	for(i=0;i<n;i++)
		cout<<" "<<array[i];
	return 0;
}

A048:不定數排序-new版

/*
描述 輸入一個數字n後面接著n個數字,將這n數從小印到大。
 
注意 為了批改方便,你必須盡可能跟標準答案的輸出入一致,有些題目的要求可能寬鬆一點,但相同必定得分。 
*/
#include <iostream>
using namespace std;
int main()
{
	int i,j,n;
	cin>>n;
	int *array=new int[n];
	cout<<"Input:\n";
	for(i=0;i<n;i++)
		cin>>array[i];
	for(i=0;i<n;i++)
		for(j=i;j<n;j++)
			if(array[i]>array[j])
				swap(array[i],array[j]);
	for(i=0;i<n;i++)
		cout<<" "<<array[i];
	delete array;
	return 0;
}

A049:不定數排序-指標版

/*
描述 輸入一個數字n後面接著n個數字,將這n數從小印到大。
 
注意 為了批改方便,你必須盡可能跟標準答案的輸出入一致,有些題目的要求可能寬鬆一點,但相同必定得分。 
*/
#include <iostream>
using namespace std;
void main()
{
	int n;
	cin>>n;
	cout<<"Input:\n";
	float *array=new float[n],*i,*j;
	for(i=array;i<array+n;i++)
		cin>>*i;
	for(i=array;i<array+n;i++)
		for(j=i;j<array+n;j++)
			if(*i>*j)
				swap(*i,*j);
	for(i=array;i<array+n;i++)
		cout<<" "<<*i;
	delete array;
}

A050:字串走訪-指標版

/*
描述 輸入一個連字串,將其印出。
 
注意 為了批改方便,你必須盡可能跟標準答案的輸出入一致,有些題目的要求可能寬鬆一點,但相同必定得分。 
*/
#include <iostream>
using namespace std;
int main()
{
	char str[1000];
	cout<<"Input:";
	cout<<endl;
	cin>>str;
	char *p=str;
	for(p;*p;p++)
		cout<<*p;
	return 0;
}

A051:字串列反印

/*
描述 輸入一正整數N,然後輸入N個連字串,將這N個字串反向印出。
 
注意 為了批改方便,你必須盡可能跟標準答案的輸出入一致,有些題目的要求可能寬鬆一點,但相同必定得分。 
*/
#include <iostream>
using namespace std;
int main()
{
	int i,n;
	char input[1000],*output[1000];
	cin>>n;
	cout<<"Input:\n";
	output[0]=input;
	for(i=0;i<n;i++)
	{
		cin>>output[i];
		output[i+1]=output[i]+strlen(output[i])+2;
	}
	for(i=n-1;i>=0;i--)
		cout<<output[i]<<endl;
	return 0;
}

A052:排列字串-繩控排序法

/*
描述 輸入一正整數N,然後輸入N個連字串,將這N個字串排序後印出。
 
注意 為了批改方便,你必須盡可能跟標準答案的輸出入一致,有些題目的要求可能寬鬆一點,但相同必定得分。 
*/
//通過率約7成
//可能是測資有問題,造成跳行錯誤
#include <iostream>
using namespace std;
int main()
{
	int i,j,n;
	char input[1000],*output[1000];
	cout<<"Input:\n";
	cin>>n;
	output[0]=input;
	for(i=0;i<n;i++)
	{
		cin>>output[i];
		output[i+1]=output[i]+strlen(output[i])+2;
	}
	for(i=0;i<n;i++)
		for(j=i;j<n;j++)
			if(strcmp(output[i],output[j])>0)
				swap(output[i],output[j]);
	for(i=0;i<n;i++)
		cout<<output[i]<<endl;
	return 0;
}

葉正聖老師: 我看到你回報的測資可能怪怪的問題。我不知道原因為何,已經回報給謝育平老師。 另外有一個程式設計的技巧(在本題可能無效)分享一下,可以避免最後一個跳行。

for(i=0;i<n;i++){
	cout<<output[i];
	if(i!=n-1)cout<<endl;
}

葉正聖老師: 謝育平老師回覆問題出在

耿耿星河欲曙天
悠悠生死別經年
翡翠衾寒誰與共
魂魄不曾來入夢
遲遲鐘鼓初長夜
鴛鴦瓦冷霜華重

你現在再測試便可以看到不同的地方。這裡還在查證到底 BIG5 在編碼時,是怎麼比大小的。請耐心等候 :)

李宗樺/我的程式練習.txt · Last modified: 2017/02/19 22:55 by 140.134.227.142