C / C++ 经典代码

文章目录

    • 1) 兔子问题
    • 2) 斐波那契数列
    • 3) 百元买百鸡
    • 4) 实心菱形
    • 5) 空心菱形
    • 6) 十进制转换为二进制
    • 7) 水仙花
    • 8) 大数相加
    • 9) 冒泡排序
    • 10) 选择排序
    • 11) 打印字母V
    • 12) 打印空心等腰三角形
    • 13) 打印大写字母Y
    • 14 ) 判断输入字符是否为回文数
    • 15) 利用sort函数进行排序
    • 16) 利用函数实现两个数的相加
    • 17) 利用函数实现两个数的交换
    • 18) 解一元二次方程组
    • 19)冒泡排序与交换排序的结合
    • 20) 倒序输出
    • 21)八皇后问题
    • 22)汉诺塔问题
    • 23)数组的行列互换

1) 兔子问题

#include
int main() {
     
	int f1=1,f2=1;
	int i;
	for(i=1; i<20; i++) {
     
		printf("%12d %12d",f1,f2);
		if(i%2==0)
			printf("\n");
		f1=f1+f2;
		f2=f2+f1;
	}
	return 0;
}

2) 斐波那契数列

#include 
using namespace std;
int main() {
     
	int f1=0,f2=1,t,n=1;
	cout<<"数列第1个:"<<f1<<endl;
	cout<<"数列第2个:"<<f2<<endl;
	for(n=3; n<=20; n++) {
     
		t=f2;
		f2=f1+f2;
		f1=t;
		cout<<"数列第"<<n<<"个:"<<f2<<endl;
	}
	cout<<endl;
	return 0;
}

斐波那契数列的应用

#include
int main() {
     
	int i,m;
	int n;
	printf("输入要求的项数:");
	scanf("%d",&n);
	float num1=2,num2=1,sum=0;
	for(i=1; i<=n; i++) {
     
		sum=sum+num1/num2;
		m=num1;
		num1=num1+num2;
		num2=m;
	}
	printf("sum=%.2f",sum);
}

3) 百元买百鸡

#include 
#include 

void swap(int x,int y,int z) {
     
	for(x=1; x<=20; x++)
		for(y=1; y<=33; y++) {
     
			z=100-x-y;
			if(x*5+y*3+z/3.0==100)
				printf("x=%d y=%d z=%d\n",x,y,z);
		}
}
int main() {
     
	int x,y,z;
	swap(x,y,z);
	return 0;
}

4) 实心菱形

#include
using namespace std;
int main() {
     
	int i,j,k;
	int N;//控制菱形的大小N;
	cin>>N;

	//先打上边的N行
	for(i=1; i<=N; i++) {
     
		for(j=1; j<=N-i; j++) {
     
			cout<<" ";//打印的空格数
		}
		for(k=1; k<=2*i-1; k++)
			cout<<"*";//星号数
		cout<<endl;
	}
	//下边的N-1行
	for(i=N-1; i>=0; i--) {
     
		for(j=1; j<=N-i; j++) {
     
			cout<<" ";//打印的空格数
		}
		for(k=1; k<=2*i-1; k++)
			cout<<"*";//星号数
		cout<<endl;
	}
	return 0;
}

5) 空心菱形

方法一:

#include
int main() {
     
	int a,n,i;
	scanf("%d",&a);
	for(n=1; n<=a/2+1; n++) {
      //n是行
		for(i=1; i<=a-n; i++)
			printf(" ");
		printf("*");
		for(i=1; i<=2*n-3; i++) {
     
			printf(" ");
		}
		if(n>1)
			printf("*");

		printf("\n");
	}
	for(n=a/2; n>0; n--) {
      //n是个数
		for(i=1; i<=a-n; i++) //这是个函数!a-n斜率为-1,a-n/2斜率为-2!
			printf(" ");
		printf("*");
		for(i=1; i<=2*n-3; i++) {
     
			printf(" ");
		}
		if(n>1)
			printf("*");

		printf("\n");
	}
	return 0;
}

方法二:

#include
int main() {
     
	int i,j,k,line,m;
	printf("请输入行数:");
	scanf("%d",&line);
	m=(line+1)/2;
	for(i=1; i<=m; i++) {
     
		for(k=0; k<m-i; k++) {
     
			printf(" ");
		}
		printf("*");
		if(i==1) {
     
			printf("\n");
			continue;
		}
		for(j=0; j<2*i-3; j++)

		{
     
			printf(" ");
		}
		printf("*");
		printf("\n");
	}
	for(i=m-1; i>0; i--) {
     
		for(k=0; k<m-i; k++) {
     
			printf(" ");
		}
		printf("*");
		if(i==1) {
     
			printf("\n");
			continue;
		}
		for(j=0; j<2*i-3; j++) {
     
			printf(" ");
		}
		printf("*");
		printf("\n");
	}
	return 0;
}

方法三:

#include"stdio.h"
#include"math.h"
int main() {
     
	int i,j,n;
	scanf("%d",&n);
	for(i=-n; i<=n; i++) {
     
		for(j=-n; j<=n; j++)
			if(abs(i)+abs(j)==n) printf("*");
			else printf(" ");
		printf("\n");
	}
}

6) 十进制转换为二进制

#include
int main() {
     

	int a,i=2,j=0;
	int b[100];
	scanf("%d",&a);
	while(i>=1) {
     
		i=a/2;
		if(i*2==a) {
     
			b[j++]=0;
		} else {
     
			b[j++]=1;
		}
		a=i;
	}
	for(j-=1; j>=0; j--)

		printf("%d",b[j]);

	return 0;
}

7) 水仙花

#include
using namespace std;

void a1() {
     
	int count =0;
	int x,backNum,befNum,t,num;
	cout<<"请输入一个三位数:"<<endl;
	cin>>x;
	t=x;
	for(int i=1; i<=3; i++) {
     
		backNum=x%10;
		befNum=x/10;
		x=befNum;
		num=backNum*backNum*backNum;
		count+=num;
	}
	cout<<"x="<<t<<endl;
	cout<<"count="<<count<<endl;
	if(count==t) {
     
		cout<<"Yes"<<endl;

	} else cout<<"No"<<endl;
}

int main() {
     
	a1();
	return 0;
}

8) 大数相加

#include
#include
#include
using namespace std;

string addStringString(string a, string b) {
     
	string s = "";
	reverse(a.begin(), a.end());
	reverse(b.begin(), b.end());
	int i = 0, m=0, k = 0;

	while(a[i] && b[i]) {
     

		m = a[i] - '0' + b[i] - '0' + k;
		k = m/10;
		s += m%10 + '0';
		i++;
	}
	if(i == a.size()) {
     
		while(i != b.size()) {
     
			m = b[i] - '0' + k;
			k = m/10;
			s += m%10 + '0';
			i++;
		}
		if(k != 0) {
     
			s += (k+'0');
		}
	} else if(i == b.size()) {
     
		while(i != a.size()) {
     
			m = a[i] - '0' + k;
			k = m/10;
			s += m%10 + '0';
			i++;
		}
		if(k != 0) {
     
			s += (k+'0');
		}
	}
	reverse(s.begin(), s.end());
	return s;
}
int main() {
     
	string a;
	string b;
	cin >> a >> b;
	cout << addStringString(a,b) << endl;
}

9) 冒泡排序

1)一维冒泡

#include
int main()
{
      
	int a[10]={
     1,2,3,4,5,6,7,8,10,9};
	int i=0,j=0;
	int t;
	for(i=0;i<10;i++)
	{
     
		for(j=0;j<10-1;j++)
		{
     
			if(a[j]>a[j+1])
			{
     
				int t=a[j];
				a[j]=a[j+1];
				a[j+1]=t;
			}
		}
	}
	printf("排好的数列为:\n");
	for(i=0;i<10;i++)
	{
     
		printf("%2d ",a[i]);
	}
 } 

2)二维冒泡:

#include
int main() {
     
	int a[3][3]= {
     {
     1,2,3},{
     4,5,6},{
     7,8,9}};
	int i,j,k;
	for(i=0; i<3; i++)
		for(j=0; j<2; j++) {
     
			if(a[i][j]>a[i][j+1]) {
     
				k=a[i][j];
				a[i][j]=a[i][j+1];
				a[i][j+1]=k;
			}
		}
	for(i=0; i<3; i++)
		for(j=0; j<3; j++)
			printf("%4d",a[i][j]);
}

10) 选择排序

#include 
int main() {
     
	int i,j,t,a[11];      //定义变量及数组为基本整型
	printf("请输入10个数:\n");
	for(i=1; i<11; i++)
		scanf("%d",&a[i]);      //从键盘中输入要排序的10个数字
	for(i=1; i<10; i++)
		for (j=i+1; j<11; j++)
			if(a[i]>a[j]) {
         //如果前一个数比后一个数大,则利用中间变量t实现两值互换
				t=a[i];
				a[i]=a[j];
				a[j]=t;
			}
	printf("排序后的顺序是:\n");
	for(i=1; i<11; i++)
		printf("%5d", a[i]);      //输出排序后的数组
	printf("\n");
	return 0;
}

11) 打印字母V

#include
int main() {
     
	int line;
	int i;
	scanf("%d",&line);
	int n=(line+1)/2;
	for(int i=n; i>0; i--) {
     
		for(int k=0; k<n-i; k++) {
     
			printf(" ");
		}
		printf("*");
		if(i==1) {
     
			printf("\n");
			continue;
		}

		for(int j=0; j<2*i-3; j++) {
     
			printf(" ");
		}
		printf("*");
		printf("\n");
	}

}

12) 打印空心等腰三角形

#include 
#include 
using namespace std;

void PriTriangle(int n) {
     
	for(int i=1; i<=n; ++i) {
     
		for(int j=1; j<=n-i; ++j) {
     
			cout<<" ";
		}
		for(int k=1; k<=2*i-1; ++k) {
     
			if(i==1 || i==n)
				cout<<"*";
			else {
     
				if(k==1 || k==2*i-1)
					cout<<"*";
				else
					cout<<" ";
			}
		}
		cout<<"\n";
	}
}

int  main() {
     
	cout<<"please input a number: ";
	int n;
	cin>>n;
	PriTriangle(n);

}

13) 打印大写字母Y

#include
using namespace std;
int main() {
     
	int n;
	cin>>n;
	int m=(n+1)/2;

	for(int i=m; i>=1; i--) {
     
		for(int k=1; k<=m-i; k++)
			cout<<" ";

		for(int j=1; j<=2*i-1; j++) {
     
			if(j==1||j==2*i-1) {
     
				cout<<"*";
			} else {
     
				cout<<" ";
			}
		}
		cout<<endl;
	}
	for(int i=0; i<m; i++) {
     
		for(int k=1; k<=m-1; k++) {
     
			cout<<" ";
		}
		cout<<"*"<<endl;
	}
	return 0;
}

14 ) 判断输入字符是否为回文数

#include
#include
int main() {
     
	char s[100];
	int i,j,n;
	printf("输入字符串:\n");
	gets(s);
	n=strlen(s);
	for(i=0,j=n-1; i<j; i++,j--)
		if(s[i]!=s[j])
			break;
	if(i>=j)
		printf("是回文串\n");
	else
		printf("不是回文串\n");
	return 0;
}

15) 利用sort函数进行排序

#include
#include
#include

using namespace std;
//bool cmp(int a,int b)
//{
     
//	return a>b;
//}
int main()
{
     
	int a[10]={
     5,1,0,3,7,8,4,6,9,2};
	sort(a,a+10); 
//	sort(a,a+10,cmp);
	for(int i=0;i<10;i++)
	{
     
		cout<<a[i]<<" ";
	}
	return 0;
}

 

16) 利用函数实现两个数的相加

#include
float add(float x,float y) {
     
	float z;
	z=x+y;
	return (z);
}
int main() {
     
	float add(float x,float y);
	float a,b,c;
	scanf("%f%f",&a,&b);
	c=add(a,b);
	printf("sum is %f",c);
	return 0;
}

17) 利用函数实现两个数的交换

#include
void swap(int *a,int *b) {
     
	int temp;
	temp = *a;
	*a = *b;
	*b = temp;
}
int main() {
     
	int a,b;
	scanf("%d%d",&a,&b);
	swap(&a,&b);
	printf("%d %d\n",a,b);
	return 0;
}

18) 解一元二次方程组

#include
#include
int main() {
     
	double a,b,c,disc,x1,x2,p,q;
	scanf("%lf%lf%lf",&a,&b,&c);
	disc=b*b-4*a*c;
	p=-b/(2.0*a);
	q=sqrt(disc)/(2.0*a);
	x1=p+q;
	x2=p-q;
	printf("x1=%7.2f\nx2=%7.2f\n",x1,x2);
	return 0;
}

19)冒泡排序与交换排序的结合

#include
void swap(int *a,int *b) {
     
	int temp=*a;
	*a=*b;
	*b=temp;
}

void b_sort(int a[]) {
     
	int t;
	for(int i=0; i<10; i++) {
     
		for(int j=0; j<9; j++) {
     
			if(a[j]>a[j+1]) {
     
//			t=a[j];
//		    a[j]=a[j+1];
//			a[j+1]=t;
				swap(&a[j],&a[j+1]);
			}
		}
	}


}
int main() {
     
	int a[10]= {
     1,2,3,4,-5,6,7,8,9,10};
	b_sort(a);
	for(int i=0; i<10; i++) {
     
		printf("%4d",a[i]);
	}


}

20) 倒序输出

#include
int main()
{
     
	int i,j;
	int t;
	int a[8];
	printf("请输入7个数:"); 
	for(i=1;i<8;i++)
	scanf("%d",&a[i]);
	for(i=0;i<8;i++)
	  for(j=1;j<7;j++)
	  if(a[i]>a[j])
      {
     
      	t=a[i];
      	a[i]=a[j];
      	a[j]=t;
		   }
		   printf(" ");
		   for(i=1;i<=7;i++)
		   printf("%5d",a[i]);	 
 } 

21)八皇后问题

#include 
#include 
#define N 8
using namespace std;
int board[N+1],cnt;
bool judge(int l,int n) {
      //判断在第l行第n个位置放是否合法
	for(int i=1; i<=l-1; ++i)
		if(board[i]==n||abs(board[i]-n)==abs(i-l))
			return false;
	return true;
}
void print() {
     
	for(int i=1; i<=N; ++i) {
     
		for(int j=1; j<board[i]; ++j)
			cout<<'*';
		cout<<'Q';
		for(int j=board[i]+1; j<=N; ++j)
			cout<<'*';
		cout<<endl;
	}
	cout<<endl;
}
void dfs(int l) {
     
	for(int i=1; i<=N; ++i) {
     
		if(judge(l,i)) {
     
			board[l]=i;
			if(l==N) {
     
				print();
				++cnt;
			} else
				dfs(l+1);
		}
	}
}
int main() {
     
	dfs(1);
	cout<<cnt;//输出答案总数
	return 0;
}

22)汉诺塔问题

#include
int main()
{
     
	void hanoi(int n,char one,char two,char three);
	int m;
	printf("input the number of diskes:");
	scanf("%d",&m);
	printf("The step to move %d diskes:\n",m);
	hanoi(m,'A','B','C'); 
 } 
	void hanoi(int n,char one,char two,char three)
	{
     
		void move(char x,char y);
		if(n==1)
		move(one,three);
		else
		{
     
			hanoi(n-1,one,three,two);
			move(one,three);
			hanoi(n-1,two,one,three);
		}
	}
void move(char x,char y)
{
     
	printf("%c->%c\n",x,y);
}

23)数组的行列互换

#include
using namespace std;
main() {
     
	int t,i,j,r[3][3]= {
     {
     1,2,3},{
     7,8,9}}; //定义要交换的数组r,大小为3*3,实际只使用了2*3
	for(i=0; i<2; i++) {
      //r的大小是2*3,把2*3变为3*2
		for(j=i; j<3; j++) {
     
			t=r[i][j];
			r[i][j]=r[j][i];
			r[j][i]=t;//交换过程,相当于交换了下标
		}
	}
	for(i=0; i<3; i++) {
      //显示,因为2*3已经是3*2了
		for(j=0; j<2; j++)
			printf("%d ",r[i][j]);
		printf("\n");
	}
}

你可能感兴趣的:(C,/C++,c++)