自学C 三月总结

//1.
//5位运动员参加了10米台跳水比赛,有人让他们预测比赛结果
//A选手说:B第二,我第三;
//B选手说:我第二,E第四;
//C选手说:我第一,D第二;
//D选手说:C最后,我第三;
//E选手说:我第四,A第一;
//比赛结束后,每位选手都说对了一半,请编程确定比赛的名次。
//
//#include<stdio.h>
//#include<windows.h>
//
//int main()
//{
// int a, b, c, d, e;
// for (a = 1; a <= 5; a++)
// {
// for (b = 1; b <= 5; b++)
// {
// for (c = 1; c <= 5; c++)
// {
// for (d = 1; d < 5; d++)
// {
// for (e = 1; e < 5; e++)
// {
// if (abcde == 120)
// {
// if (((b == 2) + (a == 3) == 1) &&
// ((b == 2) + (e == 4) == 1) &&
// ((c == 1) + (d == 2) == 1) &&
// ((c == 5) + (d == 3) == 1) &&
// ((e == 4) + (a == 1) == 1))
// {
// printf(“a=%d,b=%d,c=%d,d=%d,e=%d\n”, a, b, c, d, e);
// }
// }
// }
// }
// }
// }
// }
// system(“pause”);
// return 0;
//

//#include<stdio.h>
//#include<windows.h>
//int main()
//{
// int a, b, c, d, e;
// for (a = 1; a <= 5; a++){
// for (b = 1; b <= 5; b++){
// for (c = 1; c <= 5; c++){
// for (d = 1; d <= 5; d++){
// for (e = 1; e <= 5; e++){
// if (abcde == 120){
// if (((b == 2) + (a == 3) == 1) &&
// ((b == 2) + (e == 4) == 1) &&
// ((c == 1) + (d == 2) == 1) &&
// ((c == 5) + (d == 3) == 1) &&
// ((e == 4) + (a == 1) == 1))
// printf(“a=%d,b=%d,c=%d,d=%d,e=%d\n”,a,b,c,d,e);
// }
// }
// }
// }
// }
// }
// system(“pause”);
// return 0;
//}

//2.
//日本某地发生了一件谋杀案,警察通过排查确定杀人凶手必为4个
//嫌疑犯的一个。以下为4个嫌疑犯的供词。
//A说:不是我。
//B说:是C。
//C说:是D。
//D说:C在胡说
//已知3个人说了真话,1个人说的是假话。
//现在请根据这些信息,写一个程序来确定到底谁是凶手。

//#include <stdio.h>
//#include <Windows.h>
//int main()
//{
// int A = 0, B = 0, C = 0, D = 0;
// int FD;//因为c和d的供词刚好对立 表示对立的
// int i;
// for (i = 1; i <= 4; i++)
// {
//
// if (i == 1)//A说的假
// {
// A = 1; C = 1; FD = 1; D = 0;
// }
// if (i == 2)//B说的假
// {
// A = 0; C = 0; FD = 1; D = 0;
// }
// if (i == 3)//C说的假
// {
// A = 0; C = 1; FD = 0; D = 0;
// }
// if (i == 4)//D的说的假
// {
// A = 0; C = 1; FD = 1; D = 1;
// }
// if (A + B + C + D + FD == 1 && FD == D)
//只有一个人是凶手 当和为1时一个凶手出现 因为CD供词推出的都是D是不是 与上FD==D是为了排除D是D不是的情况
// printf(“A=%d B=%d C=%d D=%d\n”, A, B, C, D);
// }
// system(“pause”);
// return 0;
//}

//方法二
//#include <stdio.h>
//#include <Windows.h>
//int main()
//{
// int murder;
// for (murder = ‘A’; murder <= ‘D’; murder++)
// {
// if (((murder != ‘A’) + (murder == ‘C’) + (murder == ‘D’) + (murder != ‘D’)) == 3)
//三真一假,在if语句的,括号里为真结果为1,要是假结果为0。因此if括号 后面若成立,必定为三真一假,即必定等于3.
// {
// printf(“murder is %c\n”, murder); //由于最终要输出凶手,为一个字符,%c可用输出字符
//
// }
//
// }
// system(“pause”);
// return 0;
//}

//#include<stdio.h>
//#include<windows.h>
//int main(){
// int murder;
// for (murder = ‘A’; murder <= ‘D’; murder++){
// if (((murder != ‘A’) + (murder == ‘C’) + (murder == ‘D’) + (murder != ‘D’)) == 3){
// printf(“murder is %c/n”, murder);
// }
// }
//
// system(“pause”);
// return 0;
//}

//3.在屏幕上打印杨辉三角
//1
//1 1
//1 2 1
//1 3 3 1
//前提:每行端点与结尾的数为1.
//(与上图中的n不同,这里第一行定义为n = 1)
//每个数等于它上方两数之和。
//每行数字左右对称,由1开始逐渐变大。
//第n行的数字有n项。
//第n行的m个数可表示为 C(n - 1,m - 1),即为从n - 1个不同元素中取m - 1个元素的组合数。
//第n行的第m个数和第n - m + 1个数相等 ,为组合数性质之一。
//每个数字等于上一行的左右两个数字之和。可用此性质写出整个杨辉三角。即第n + 1行的第i个数等于第n行的第i - 1个数和第i个数之和,这也是组合数的性质之一。即 C(n + 1, i) = C(n, i) + C(n, i - 1)。
//(a + b)n的展开式中的各项系数依次对应杨辉三角的第(n + 1)行中的每一项。
//将第2n + 1行第1个数,跟第2n + 2行第3个数、第2n + 3行第5个数……连成一线,这些数的和是第4n + 1个斐波那契数;将第2n行第2个数(n>1),跟第2n - 1行第4个数、第2n - 2行第6个数……这些数之和是第4n - 2个斐波那契数。
//将第n行的各数值,分别乘以10的列数m - 1次方,然后把这些数值相加的和等于11的n - 1次方。例子:第11行数分别为1, 10, 45, 120, 210, 252, 210, 120, 45, 10, 1,则11 ^ 10 = 1 * 10 ^ 0 + 10 * 10 ^ 1 + 45 * 10 ^ 2 + … + 1 * 10 ^ 10 = 25937424601
//#include <stdio.h>
//#define N 10
//int main()
//{
// int i;
// int j;
// int a[N][N];//数组为10行10列
// for (i = 0; i < N; i++)
// {
// a[i][0] = 1;//使第1列的元素值为1
// a[i][i] = 1;//使对角线的元素值为1
// }
// for (i = 2; i < N; i++)//从第3行开始处理
// {
// for (j = 1; j < i; j++)
// {
// a[i][j] = a[i - 1][j - 1] + a[i - 1][j];
// }
// }
// for (i = 0; i < N; i++)
// {
// for (j = 0; j <(2 * N - 2 * i); j++)
// {
// printf(" “);
// }
// for (j = 0; j <= i; j++)
// {
// printf(”%4d", a[i][j]);//输出数组各元素的值
// }
// printf("\n");
// }
// system(“pause”);
// return 0;
//}

#include<stdio.h>
#include<windows.h>
#define N 10
int main(){
int i;
int j;
int a[N][N];
for (i = 0; i < 2; i++){//TODO

	a[i][0] = 1;
	a[i][i] = 1;
}
for (i = 2; i < N; i++){
	for (j = 1; j < i; j++){
		a[i][j] = a[i - 1][j - 1] + a[i - 1][j];
	}
}
for (i = 0; i < N; i++){
	for (j = 0; j < (N * 2 - i * 2); j++){
		printf(" ");
	}
	for (j = 0; j <= i; j++){
		printf("%4d", a[i][j]);
	}
	printf("\n");
	}	
system("pause");
return 0;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值