第 11周C语言总结

  1. 蛇形矩阵  

题目

//这里主要是矩阵的赋值,这里主要练习二维数组坐标的转换。这里可以的数组从1开始赋值,
//在下面while循环语句中的横纵坐标直接进行加减,减少了代码行,而且更好看。
//这里脑子转不过来,要慢慢想,才能做出,这也是做题,写代码前要思路清晰才能够写得好,写的快。

#include<stdio.h>
int main() {
	int a[100][100];
	int n;
	while (scanf("%d", &n) != EOF) {
		int col,row,k=1,m=0;
		for (int i = 1; i <= n; i++)
		{
			row = i; col = 1;
			while (1) {
				a[row--][col++] = k++;
				if (row == 0)break;
			}
		}
			for(int i=1;i<=n;i++)
				for (int j = 1; j <= n+1-i; j++)
				{
					printf("%d ", a[i][j]);
					if (j == n+1-i)printf("\n");
				}

	}

	return 0;
}

2.算法:埃氏筛

int fun(int n) {
    int k=0, j;
    for (int i = 2; i <= n; i++)
    {
        if (!a[i]) {
            b[k++] = i;
            for (j = 2; j * i <= n; j++)
                a[i * j] = 1;
        }
            
    }
      
    return k;
}

这里的算法相比于暴力法,虽然这里浪费了空间,但是让时间减少了许多,能避免超时;

例如:

这题理论上埃氏筛因该能过的。

//这题主要是用了埃氏筛,这里选出素数后,所以在n的范围内筛选出的倍数都是合数,
//所以之后这个数就不用再次访问了,这里用vis数组代表数i是否被访问过。
//只要没有被访问过所以都是素数。
#include <stdio.h>
int vis[1000001];
int prime[100000] ;

void fun(int n) {
	int i, k;
	k = 0;
	for ( i = 2; i <= n; i++)
	{
		if (!vis[i])
		{
			prime[k++] = i;
			for (int j = 2; j * i <= n; j++)
				vis[j * i] = 1;
		}
	}
	 
}


int main() {
	int n,k;
	fun(1000000);
	while (scanf("%d", &n) != EOF) {
		
		for (int i = 0; prime[i] <= n&&prime[i]&&i<n; i++)
			printf("%d\n", prime[i]);
	}
	return 0;
}

3.第一次做出结构体的题

题目:

代码:

#include<stdio.h>
typedef struct stu
{
	char name[20];
	int finalScore;
	int classReview;
	char classLeader;
	char west;
	int discourse;
}stu;

int main() {
	stu a[100];
	int b, i, n;
	while (scanf("%d", &n) != EOF) {
		int sum[100] = { 0 };

		for (i = 0; i < n; i++)
		{                              //主要这里的输入%c前面要空一格。
			scanf("%s%d%d %c %c%d", &a[i].name, &a[i].finalScore, &a[i].classReview, &a[i].classLeader, &a[i].west, &a[i].discourse);
			if (a[i].finalScore > 80 && a[i].discourse > 0)sum[i] += 8000;
			if (a[i].finalScore > 85 && a[i].classReview > 80)sum[i] += 4000;
			if (a[i].finalScore > 90)sum[i] += 2000;
			if (a[i].west == 'Y' && a[i].finalScore > 85)sum[i] += 1000;
			if (a[i].classReview > 80 && a[i].classLeader == 'Y')sum[i] += 850;
		}
		int max = sum[0];
		int k = 0, d = 0;
		for (i = 0; i < n; i++)
		{
			if (sum[i] > max) {
				max = sum[i]; k = i;

			}
			d += sum[i];
		}
		
		printf("%s\n%d\n%d\n", a[k].name, sum[k], d);

	}


}

4.今天讲了二分法,和二分答案算法

但是还没完全理解,尽量下周的时候早点理解。

http://t.csdnimg.cn/IWDV7

今天早上再看吧!!!

这周尽量把书的内容全部看完,然后养成上传github的习惯,这周熟悉并配置好,还有鹏哥的规范写法,看一些重点吧!!!

OKOK

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值