第三周周报

 

本周做了一些算法题,主要还是复习了一下学过的知识,然后再学习了一些文件~~~

 

一.算法题

1.回文质数

我的思路非常粗暴,想着先判断回文数再判断素数,看了别人写的一些文章后,构造回文数再判断素数比较好。
偶数位的回文数都能被11整除
所以一个k位数,可以构造出一个奇数位的回文数。

#include<stdio.h>

int is_prime(int x) {
    if(x == 1) return 0;
	if(x == 2) return 1;
	for(int i = 2; i*i <= x; i++) 
	{
		if(x % i == 0) 
		return 0;
	}
	return 1;
}

int main() {
	int a, b;
	scanf("%d %d", &a, &b);

	for(int i = 5; i <= 100000; i ++) {
		if(i == 9 && a <= 11 && b >= 11)
		{
			puts("11");	
		} 

		int temp = i/10, ans = i;

		while(temp > 0) 
		{
			ans = ans * 10;
			ans = ans + tmep%10;
			temp /= 10;
		}
		if(ans > b) 
         break;
		if(ans >= a && is_prime(ans)) 
         printf("%d\n", ans);
	}
	return 0;
}

 

2.复习二分查找

如洛谷P2249

#include <stdio.h>
#include <stdlib.h>

int main()
{
	int n,m;
	scanf("%d %d",&n,&m);
	int a[n+5],i;

	for(i=0;i<n;i++){
		scanf("%d",&a[i]);
	}

	int j=0;

	for(i=0;i<m;i++){
		int s,f=0,u;
		scanf("%d",&s);
		int left=0,right=n-1;
		
		while(left<=right)
        {
			int middle=(right-left)/2+left;
			if(s<a[middle]) 
              right=middle-1;
			else if(s>a[middle]) 
              left=middle+1;
			else if(s==a[middle]) 
            {
				if(middle>0&&a[middle-1]==s)
                {
				int high=middle,low=0;
		        while(low<high)
                  {
		    	    int mid=(high+low)/2;
		    	    if(a[mid]==s) 
                      high=mid;
		    	    if(a[mid]<s) 
                      low=mid+1;
			      }

			     printf("%d ",high+1);}
			    else 
                 printf("%d ",middle+1);
			     f=1;
			     break;
		       }
	      }
	      if(f==0) 
	      printf("-1 ");	
   }
}

二.排序链表,学习了学长的博客,其实就是普通排序的思想

void sort(pnode head)
{
	int len,i,j,t;
	pnode p,q;
	
	len = length(head);
	p=head->next;

	for(i = 0,p=head->next;i<len-1;++i,p = p->next)
	{
		for(j=0,q=p->next;j<len-i-1;++j,q=q->next)
		{
			if(p->data > q->data)
			{
				t=p->data;
				p->data = q->data;
				q->data = t;
			}
		}
	}
}

三.文件

  关于文件的函数

  1.打开与关闭文件函数分别是fopenfclose

     引用方法:

FILE*fp
fp = fopen(文件名,“使用文件方式”)//文件名是一个字符串

2.顺序读写数据文件:读写字符函数

   读字符 fgetc,写字符fputc

  检测文件是否介绍的函数:feof(文件指针)~~~(end of file):当文件结束时返回非零值,未结束时返回零

例如下复制文件代码段:

	printf("请输入复制后的文件名:\n");
	
	gets(filename);//输入文件名
	
	printf("请输入复制后的文件名:\n"); 
	
    gets(filename1);
	
	if((p1=fopen(filename,"rb"))==NULL)//打开被复制的文件 
	{
		printf("ERROR");
		exit(0);
	}
	
	if((p1=fopen(filename,"wb"))==NULL)//打开被复制的文件 
	{
		printf("ERROR");
		exit(0);
	}
	
	while(!feof(p1))//当返回值是零时执行循环
	{
		ch=fgetc(p1);//读出每一个p1指向的文件中的字节,把ch写到p2指向的文件中去,若无p2文件,则会建立一个filename1字符数组命名的文件
		fputc(ch,p2); 
	 } 
	 
	printf("复制成功");
	
	fclose(p1);
	fclose(p2);//用完之后,为了避免不必要的操作干扰读写,要关闭文件,即断掉文件指针与文件的联系 

注:EOF和NULL一样都是标准库里的宏定义,EOF就是-1,NULL代表0

3.用格式化的方式读写文本文件

  fscanffprintf

格式:

fscanf(fp,"%s",string);

fprintf(fp,"%d",i);

4.rewind函数:将文件内部的指针重新指向一个文件的开头

rewind(文件指针);

   fseek函数:文件指针位置函数

fseek(文件指针,位移量,起始量);

   ferror函数:检查错误

   clearerr函数:使文件错误标志和文件结束标志为零

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值