//7744问题 #include<stdio.h> #include<math.h> int main() { for(int a=1;a<=9;a++) for(int b=1;b<=9;b++) { int n=a*1100+b*11; int m=floor(sqrt(n)+0.5) ;//floor(x)函数 , //也称为下取整函数或地板函数, //是一种数学函数,用于将一个数向下取整到最接近的整数。 if(m*m==n) printf("%d\n",n); } return 0; } //为了减少误差的影响,一般改成四舍五入,即floor(x+0.5)。
floor(x)函数,也称为下取整函数或地板函数,是一种数学函数,用于将一个数向下取整到最接近的整数。也就是说,对于任意实数x,floor(x)返回不大于x的最大整数。
//枚举平方根x,从而避免开平方操作。
#include<stdio.h> int main() { for(int x=1; ;x++) { int n=x*x; if(n<1000) continue;//continue是指跳回for循环的开始, //执行调整语句并判断循环条件(即“直接进行下一次循环”) if (n>9999 ) break; //break是直接跳出循环。 int hi=n/100; int lo=n%100; if(hi/10==hi%10&&lo/10==lo%10) printf("%d\n",n); } return 0; }
//3n+1问题
#include<stdio.h> int main() { int n2,count=0; scanf("%d",&n2); long long n=n2; while(n>1) { if(n%2==1) n=n*3+1; else n/=2; count++; } printf("%d\n",count); return 0; }
//近似计算
#include<stdio.h> int main() { double sum=0; for(int i=0; ;i++) { double term=1.0/(i*2+1); if(i%2==0) sum+=term; else sum-=term; if(term<1e-6) break; } printf("%.6f\n",sum); return 0; }
//阶乘之和
#include<stdio.h> #include<time.h> int main() { const int MOD =1000000; int n,S=0; scanf("%d",&n); for(int i=1;i<=n;i++) { int factorial=1; for(int j=1;j<=i;j++) factorial=(factorial*j%MOD); S=(S+factorial)%MOD; } printf("%d\n",S); printf("Time used=%.2f\n",(double)clock()/CLOCKS_PER_SEC); return 0; }
在C语言中,clock()
函数是一个用于测量程序执行时间的库函数,它返回程序执行起(一般是程序的开头)到clock()
函数被调用时止的CPU时钟计时单元(clock tick)数。这个函数通常用于粗略地测量代码段的执行时间。
CLOCKS_PER_SEC
是一个在<time.h>
头文件中定义的常量,表示每秒的时钟计时单元数,即系统时钟的频率。
(double)clock() / CLOCKS_PER_SEC
这个表达式的含义是将clock()
返回的时钟计时单元数转换为秒数。由于clock()
返回的是clock_t
类型的值,这通常是一个整数类型,所以在做除法之前先将其转换为double
类型,以得到更加精确的时间值(秒数)。
(double)clock()/CLOCKS_PER_SEC这个表达式的结果大致表示了程序从某个点(通常是程序的开始)到调用clock()
函数时经过的时间。
//数据统计
#define LOCAL #include<stdio.h> #define INF 1000000000 int main() { #ifdef LOCAL freopen("date.in","r",stdin); freopen("date.out","w",stdout); #endif int x,n=0,min=INF,max=-INF,s=0;//负无穷大,注意这里的-INF应该是一个非常大的负数, // 而不是真正的负无穷大,因为C/C++中没有内置的负无穷大表示 while(scanf("%d",&x)==1) { s+=x; if(x<min) min=x; if(x>max) max=x; //printf("x=%d,min=%d,max=%d\n",x,min,max); n++; } printf("%d %d %.3f\n",min,max,(double)s/n); return 0; }
在C和C++编程语言中,输入流通常与文件操作和标准输入(如键盘)相关联。
scanf("%d",&x)==1 如果输入流中当前有一个整数,并且没有其他非预期的字符或格式错误,scanf
会读取这个整数,将其存储在x
中,并返回1。如果输入流中当前没有整数,或者读取整数时遇到错误(比如,输入流已经到达文件末尾,或者输入流中包含非数字字符),则scanf
将返回一个小于1的值。
#ifdef LOCAL
:这是一个预处理指令,用于检查是否定义了名为LOCAL
的宏。如果定义了LOCAL
,则编译器会编译下面的代码;如果没有定义,编译器会忽略这些代码。这通常用于调试目的,以便从文件中读取输入而不是从标准输入(如键盘)读取。freopen("date.in","r",stdin);
:这行代码重新打开标准输入流stdin
,使其指向名为date.in
的文件,以读取模式("r"表示读取)打开。这样,接下来的scanf
函数将从date.in
文件中读取数据,而不是从键盘。freopen("date.out","w",stdout);
:这行代码重新打开标准输出流stdout
,使其指向名为date.out
的文件,以写入模式("w"表示写入)打开。这样,接下来的printf
或其他输出函数将把结果写入date.out
文件,而不是显示在屏幕上。#endif
:结束#ifdef LOCAL
的条件编译块。
#include<stdio.h> #define INF 1000000000 int main() { FILE *fin,*fout fin=fopen("date.in","rb"); fout=fopen("date.out","wb"); int x,n=0,min=INF,max=-INF,s=0; while(fscanf(fin,"%d",&x)==1) {s+=x; if(x<min) min=x; if(x>max) max=x; n++; } fprintf(fout,"%d %d %.3f\n", min,max,(double)s/n); fclouse(fin); fclouse(fout); return 0; } }
fscanf(fin,"%d",&x)==1
-
fin
:这是一个文件指针,它指向你想要读取数据的文件。通常,这个文件指针会在之前通过fopen
函数打开文件时获得。 - 如果文件
fin
指向的位置有一个整数,并且没有其他非预期的字符或格式错误,fscanf
会读取这个整数,将其存储在x
中,并返回 1。如果文件指针fin
已经到达文件末尾,或者读取整数时遇到错误(比如,文件中包含非数字字符),则fscanf
会返回一个小于 1 的值。 - 通常,会在循环中使用
fscanf
,以便从文件中连续读取多个整数,直到文件结束或遇到其他错误。
标签:竞赛,入门,clock,int,max,算法,date,include,fin From: https://www.cnblogs.com/LCGJ/p/18035828