#include<stdio.h>#include<string.h>#include<stdlib.h>#include<time.h>// 判断一个三位数是否为回文数intisH(int a){// 分别得到百位、十位和个位数int h = a /100;// 百位数int t =(a %100)/10;// 十位数int i = a %10;// 个位数// 如果百位和个位相同,则为回文数,返回1,否则返回0return h == i;}// 主函数intmain(int argc,constchar*argv[]){int arr[1000]={0};// 初始化一个长度为1000的数组,用于筛选素数// 循环从2遍历到999,寻找素数for(int i =2; i <1000; i++){// 如果当前数字未被标记为非素数if(!arr[i]){// 如果当前数字大于100,并且是回文数if(i >100&&isH(i)){// 打印出该回文素数printf("%d\n", i);}// 使用埃拉托斯特尼筛法标记所有i的倍数为非素数for(int j = i + i; j <1000; j += i){
arr[j]=1;}}}// 程序结束return0;}
1156:求π的值
#include<stdio.h>// 包含stdio.h头文件,用于使用printf函数#include<math.h>// 包含math.h头文件,用于使用sqrt函数和atan函数doublearctanx(double x){double result =0;// 定义变量result,用于存储arctan(x)的近似值double term = x;// 定义变量term,用于存储每一项的值double numerator = x;// 定义变量numerator,用于存储每一项的分子double denominator =1;// 定义变量denominator,用于存储每一项的分母int sign =1;// 定义变量sign,用于存储每一项的正负号int n =1;// 定义变量n,用于记录当前项的序号while(term >=1e-6){// 当最后一项小于10^-6时终止循环
result += sign * term;// 累加每一项的值到结果中
numerator *= x * x;// 更新分子,乘以x^2
denominator +=2;// 更新分母,加2
term = numerator / denominator;// 计算当前项的值
sign =-sign;// 更新正负号
n++;// 序号加1}return result;// 返回arctan(x)的近似值}intmain(){double x =1.0/sqrt(3.0);// 定义x为1/√3double pi =6*arctanx(x);// 计算π的近似值printf("%.10lf\n", pi);// 打印π的近似值,保留到小数点后10位return0;// 返回0,表示程序执行成功}
1157:哥德巴赫猜想
#include<stdio.h>// 包含stdio.h头文件,用于使用printf函数#include<stdbool.h>// 包含stdbool.h头文件,用于使用bool类型
bool isPrime(int n){if(n <=1){return false;// 1不是素数}for(int i =2; i * i <= n; i++){if(n % i ==0){return false;// 如果n能被i整除,说明n不是素数}}return true;// 如果n不能被任何数整除,说明n是素数}intmain(){for(int evenNum =6; evenNum <=100; evenNum +=2){printf("%d=", evenNum);
bool found = false;// 用于标记是否找到了两个素数的组合for(int i =2; i <= evenNum /2; i++){if(isPrime(i)&&isPrime(evenNum - i)){printf("%d+%d\n", i, evenNum - i);// 打印两个素数的组合
found = true;break;// 找到一个组合就退出内层循环}}// 如果没有找到两个素数的组合,打印"未找到"if(!found){printf("未找到\n");}}return0;// 返回0,表示程序执行成功}
1397:简单算术表达式求值
#include<bits/stdc++.h>
using namespace std;intcalc(int a,int b,char c)//返回数字a,b通过运算符c运算后得到的结果 {if(c =='+')return a + b;elseif(c =='-')return a - b;elseif(c =='*')return a * b;elseif(c =='/')return a / b;elseif(c =='%')return a % b;}intmain(){int a, b;char c;
cin >> a >> c >> b;
cout <<calc(a, b, c);return0;}
1398:短信计费
#include<bits/stdc++.h>
using namespace std;doubleprice(int num)//求字符数量为num的短信的费用 {if(num %70==0)//如果字符数量是70的整数倍 return num /70*0.1;//有num/70条短信 else//如果字符数量不是70的整数倍 return(num /70+1)*0.1;//有num/70+1条短信 }intmain(){int n, num;
cin >> n;double sum =0;//总费用 for(int i =0; i < n;++i){
cin >> num;
sum +=price(num);}
cout << fixed <<setprecision(1)<< sum;return0;}
#include<stdio.h>#include<string.h>#include<ctype.h>#defineN1000005char s[N], word[105], temp[105];voidlower(char s[],int len){for(int i =0; i < len;++i)
s[i]=tolower(s[i]);}intmain(){int k =0, firstPos =-1, ct =0;fgets(word,105,stdin);fgets(s, N,stdin);// remove the newline at the end of word and s
word[strcspn(word,"\n")]=0;
s[strcspn(s,"\n")]=0;int len =strlen(s), lenw =strlen(word);lower(word, lenw);lower(s, len);for(int i =0; i <= len;++i){if(s[i]==' '|| s[i]=='\0'){
temp[k]='\0';if(strcmp(temp, word)==0){
ct++;if(firstPos ==-1)
firstPos = i - lenw;}
k =0;}else{
temp[k++]= s[i];}}if(firstPos ==-1)printf("-1\n");elseprintf("%d %d\n", ct, firstPos);return0;}
1401:机器翻译
#include<stdio.h>#include<string.h>#include<stdbool.h>
bool hasWord[1005];//hasWord[i]:内存中是否有单词i int mem[105], mi;//mem[i]:内存中第i位置的单词 mi:内存中刚刚保存单词的位置 int ct, m, n, word;//ct:计数 intmain(){memset(mem,-1,sizeof(mem));//mem数组初值为-1,表示该位置没有保存单词。如果保存单词,值为非负整数。 scanf("%d%d",&m,&n);for(int i =0; i < n;++i){scanf("%d",&word);if(hasWord[word]== false)//如果word单词不存在 {
hasWord[word]= true;//将word单词设为已经存在
mi =(mi +1)% m;//mi取循环数组中的下一个位置 if(mem[mi]>=0)//如果这个内存中的新位置mi已经有值了
hasWord[mem[mi]]= false;//把mi位置保存的单词mem[mi]设为不存在
mem[mi]= word;//内存中新位置保存单词word
ct++;//这种情况需要到外存查字典 计数加1 }}printf("%d", ct);return0;}
#include<stdio.h>#include<math.h>#include<stdbool.h>
bool isPrime(int n)//求大于等于2的整数n是不是质数 {for(int i =2; i <=sqrt(n);++i)if(n % i ==0)return false;return true;}intmain(){int n;scanf("%d",&n);
bool isEmpty = true;for(int i =4; i <= n;++i)//i为较大的数字,较小的数字为i-2 {if(isPrime(i)&&isPrime(i-2))//如果两个数都是质数 {
isEmpty = false;printf("%d %d\n", i-2, i);}}if(isEmpty)printf("empty");return0;}
1404:我家的门牌号
#include<stdio.h>intmain(){int n;scanf("%d",&n);for(int y =1; y <=100000;++y)for(int x =1; x <= y;++x)if((1+y)*y/2-3*x == n){printf("%d %d", x, y);return0;}return0;}
1405:质数的和与积
#include<stdio.h>#include<math.h>// 用于调用sqrt()函数// 函数用于检查一个数是否是质数
bool isPrime(int n){// 从2开始到sqrt(n),检查是否有因子for(int i =2; i <=sqrt(n);++i){if(n % i ==0)// 如果发现因子,则n不是质数return false;}return true;// 如果没有发现因子,则n是质数}intmain(){int s, mx =0;// s是输入的数,mx是我们要找的最大乘积scanf("%d",&s);// 读入s// 从2到s/2循环,寻找一对质数,它们的和为sfor(int i =2; i <= s/2;++i){// 如果i和s-i都是质数if(isPrime(i)&&isPrime(s - i)){// 检查它们的乘积是否比目前发现的mx大if(i *(s - i)> mx)
mx = i *(s - i);// 更新mx为更大的乘积}}printf("%d", mx);// 输出最大乘积return0;}
#include<stdio.h>#include<stdbool.h>#include<math.h>#include<string.h>#defineN105// 函数:判断自然数 n 是否是质数
bool isPrime(int n){if(n <2)return false;for(int i =2; i <=sqrt(n);++i){if(n % i ==0)return false;}return true;}intmain(){char s[N];// 字符数组来存储字符串scanf("%s", s);// 读取字符串int chNum[26]={0}, maxn =0, minn = N;// chNum[i]:存储字母 'a'+i 出现的次数// 遍历字符串统计每个字母出现的次数for(int i =0; i <strlen(s);++i){
chNum[s[i]-'a']++;}// 遍历字母表的每个字母for(int i =0; i <26;++i){if(chNum[i]>0){// 如果字母出现过if(chNum[i]> maxn) maxn = chNum[i];if(chNum[i]< minn) minn = chNum[i];}}// 判断最多和最少出现次数之差是否为质数if(isPrime(maxn - minn)){printf("Lucky Word\n%d\n", maxn - minn);}else{printf("No Answer\n0\n");}return0;}
1408:素数回文数的个数
#include<stdio.h>#include<math.h>#include<stdbool.h>// 判断n是否是质数
bool isPrime(int n){if(n <2)return false;for(int i =2; i <=sqrt(n);++i){if(n % i ==0){return false;}}return true;}// 判断两位或三位数n是否是回文数
bool isPal(int n){int g, d;// g:最高位 d:最低位int a = n;// 获取最高位while(a >=10){
a /=10;}
g = a;// 获取最低位
d = n %10;// 判断最高位与最低位是否相等return g == d;}intmain(){int n, s =0;// n:输入的数,s:回文质数的计数scanf("%d",&n);// 读取输入// 检查范围内的每个数是否是回文质数for(int i =11; i <= n;++i){if(isPrime(i)&&isPal(i)){
s++;// 如果是回文质数,计数加一}}printf("%d", s);// 输出回文质数的总数return0;}
1409:判决素数个数
#include<stdio.h>#include<math.h>// 判断正整数n是否是质数intisPrime(int n){if(n <2)return0;// 如果n小于2,那么它不是质数for(int i =2; i <=(int)sqrt((double)n);++i){if(n % i ==0)return0;// 如果n能被一个小于它的数整除,那么它不是质数}return1;// 否则,n是质数}intmain(){int ct =0;// 质数计数器int x, y, temp;// 读取输入的两个数scanf("%d %d",&x,&y);// 如果x大于y, 交换它们的值以确保x小于等于yif(x > y){
temp = x;
x = y;
y = temp;}// 遍历x到y之间的每个整数,包括x和y本身for(int i = x; i <= y;++i){if(isPrime(i))// 检查当前数字是否为质数
ct++;// 如果是质数,计数器加1}// 输出质数的总数printf("%d", ct);return0;}
1410:最大质因子序列
#include<stdio.h>#include<math.h>// 判断大于等于2的整数n是否是质数intisPrime(int n){for(int i =2; i <=(int)sqrt((double)n);++i){if(n % i ==0)return0;// 如果n可以被i整除,则不是质数}return1;// n是质数}// 求n的最大质因子intmaxPrimeFactor(int n){for(int i = n; i >=2;--i){// 从大到小遍历if(n % i ==0&&isPrime(i))return i;// 找到最大的质因子}return1;// 如果n为1,则返回1}intmain(){int m, n;scanf("%d %d",&m,&n);// 输入m和nint isFirst =1;// 标志位:是否是第一个输出的数字for(int i = m; i <= n;++i){if(!isFirst){printf(",");// 如果不是第一个数字,输出逗号分隔符}else{
isFirst =0;// 更新标志位}printf("%d",maxPrimeFactor(i));// 输出i的最大质因子}return0;}
1411:区间内的真素数
#include<stdio.h>#include<math.h>#include<stdbool.h>
bool isPrime(int n)//判断是否是质数{if(n <2)return false;for(int i =2; i <=sqrt(n);++i)if(n % i ==0)return false;return true;}intrev(int n)//数字反序{int num =0;for(int a = n; a >0; a /=10)//数字拆分 前提n >= 1
num = num *10+ a %10;return num;}intmain(){int m, n;scanf("%d %d",&m,&n);
bool hasShow = false;//是否已经有输出for(int i = m; i <= n;++i){if(isPrime(i)&&isPrime(rev(i)))//如果i和i的逆序的数字都是质数{if(hasShow)//如果已经输出过printf(",");else
hasShow = true;printf("%d", i);}}if(!hasShow)//如果没有输出过printf("No");return0;}