A.哥德巴赫猜想
#include<stdio.h>
#include<string.h>
int a[10000];
int main(){
int n;
scanf("%d", &n);
memset(a, -1, sizeof(a));//只能全赋值0或者-1,此时只要非零即可
a[0] = a[1] = 0;
for(int i = 2; i <= 10000; i ++){
if(a[i]){
for(int j = 2; i * j <= 10000; j ++){
a[i * j] = 0;
}
}
}
for(int i = 4; i <= n; i += 2){
for(int j = 2; j <= i / 2; j ++){
if(a[j] && a[i - j]){
printf("%d=%d+%d\n", i, j, i - j);
break;
}
}
}
return 0;
}
B.生日蛋糕
#include<stdio.h>
int main()
{
int m;
scanf("%d",&m);
while(m--)
{
int n;
scanf("%d",&n);
printf("%d\n",(n*n+n+2)/2);
}
return 0;
}
C.打印代码Easy_Version
#include<stdio.h>
int main()
{
puts("#include<bits/stdc++.h>");
puts("using namespace std;");
puts("int main()");
puts("{");
puts(" int a;");
puts(" scanf(\"%d\",&a);");
puts(" a=a%10;");
puts(" printf(\"%d\\n\",a);");
puts("}");
}
D.阿黄的数组
#include<string.h>
#include<stdio.h>
const int N=1e5+10;//定义一个全局变量
int a[N];
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
memset(a,0,sizeof(a));//将数组a的值全部归零
int cnt=0;
int n;
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
int b;
scanf("%d",&b);
if(!a[b]) cnt++;
a[b]++;
}
if(cnt>=3)puts("NO");
else if(cnt==1) puts("YES");
else
{
int c=0,d=0;
for(int i=1;i<=100000;i++)
if(a[i]&&!c) c=a[i];
else if(a[i]&&!d) d=a[i];
else if(c&&d) break;
if(c==d||c==d-1||d==c-1) puts("YES");
else puts("NO");
}
}
return 0;
}
E.烤鸡
#include<stdio.h>
int res[40010][11];//全局变量默认为0,有需要再初始化
int q[12];
int n,cnt;
void dfs(int v,int u)
{
if(u>10||v<0)return;
if(u==10&&v==0)
{
for(int i=0;i<10;i++)
res[cnt][i]=q[i];
cnt++;
}
for(int i=1;i<=3;i++)
if(v-i>=0)
{
q[u]=i;
dfs(v-i,u+1);
}
}
int main()
{
scanf("%d",&n);
if(n<10||n>30)
{
puts("0");
return 0;
}
dfs(n,0);
printf("%d\n",cnt);
for(int i=0;i<cnt;i++)
{
for(int j=0;j<10;j++)printf("%d ",res[i][j]);
puts("");
}
}
F.摘麦穗
#include<stdio.h>
int main()
{
int n;
int a[500000];
scanf("%d",&n);
int sum=0;
int cnt=0;
int now=0;
for(int i=0;i<n;i++){
scanf("%d",&a[i]);
if(a[i]>now*0.95){
cnt++;
sum+=now;
now=a[i];
}
}
printf("%d\n%d\n%d",cnt-1,sum,now);
}
G.寻宝
#include<stdio.h>
int x,y,k;
int max(int v,int u){
return v>u ? v:u;
}
void solve()
{
scanf("%d%d%d",&x,&y,&k);
if(x+k>=y)printf("%d\n",max(x,y));
else printf("%d\n",y+y-x-k);
return;
}
signed main()
{
int T;
scanf("%d",&T);
while(T--)
solve();
return 0;
}
H.Max Value
这题原本打算用归并排序的,但是数据出的太小,暴力也过了。建议看一下归并排序
#include<stdio.h>
int n;
int sum;
int a[50000];
int value[50000];
void merge_sort(int x[],int start,int mid,int end){
int tmp[end-start+1];
int i = start;
int j = mid + 1;
int k = 0;
while(i <= mid && j <= end)
{
if (a[i] <= a[j]){
tmp[k++] = a[i++];
}else{
tmp[k++] = a[j++];
sum+=mid-i+1;
}
}
while(i <= mid)
tmp[k++] = a[i++];
while(j <= end)
tmp[k++] = a[j++];
// 将排序后的元素,全部都整合到数组a中。
for (i = 0; i < k; i++)
a[start + i] = tmp[i];
}
void merge(int x[],int start,int end){
if(x==NULL||start>=end){
return;
}
int mid=(start+end)/2;
merge(x,start,mid);
merge(x,mid+1,end);
merge_sort(x,start,mid,end);
}
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)scanf("%d",&a[i]);
merge(a,1,n);
printf("%d",sum);
//system("pause");
return 0;
}
I.聚会
#include<stdio.h>
int gcd(int a, int b)
{
if (b == 0)
return a;
else
return gcd(b, a % b);
}
int main()
{
int n;
scanf("%d",&n);
int cnt;
while(n--)
{
cnt=0;
int a;
scanf("%d",&a);
for(int i=1;i<a;i++)
{
if(gcd(i,a)>1)
{
cnt++;
}
}
printf("%d",a-cnt-1);
}
}
J.RPG
#include<stdio.h>
long long D(int n)
{
if (n == 1)
{
return 0;
}
if (n == 2)
{
return 1;
}
else
{
return (n - 1)*(D(n - 2) + D(n - 1));
}
}
long long Cmn(int n, int m)
{
long long sum = 1;
for (int i = 1; i <= m; i++)
{
sum = sum*n/i;
n--;
}
return sum;
}
int main()
{
int n;
scanf("%d", &n);
int ans = 0;
if (n == 1 || n == 2)
{
puts("1");
}
else
{
int k = n / 2;
long long ans = 0;
for (int i = 1; i <= k; i++)
{
ans += D(i)*Cmn(n,i);
}
printf("%lld\n", ans+1);
}
return 0;
}
K.无尽亵渎
#include<stdio.h>
#include<math.h>
int main()
{
int a,b;
scanf("%d %d",&a,&b);
b=b+1;
int c[10010],d[10010];
for(int i=1;i<=a;i++)
{
scanf("%d",&c[i]);
d[i]=c[i];
}
int cnt=0,ks=0;
int n;
while(1){
if(cnt==1||ks==0)
{
cnt=0;
ks=1;
for(int i=1;i<=a;i++){
n=2;
for(int j=2;j<=sqrt(c[i]);j++){
if(c[i]%j==0)
{
n=1;
break;
}
}
if(c[i]-b*n>0)
{
c[i]=c[i]-b*n;
}
else if(c[i]!=0)
{
c[i]=0;
cnt=1;
if(c[d[i]]!=0)
c[d[i]]++;
}
}
}
else
{
break;
}
}
for(int i=1;i<=a;i++){
if(i!=1)printf(" ");
printf("%d",c[i]);
}
}
L.爱玩游戏的明明
#include<stdio.h>
int main()
{
int n,a,b,c,maxn;
scanf("%d %d %d %d",&n,&a,&b,&c);
int d[6][3]={{a,b,c},{a,c,b},{b,a,c},{b,c,a},{c,a,b},{c,b,a}};
int k;
for(int i=0;i<6;i++)
{
k=n;
for(int j=0;j<3;j++)
{
k=k*(100-d[i][j])/100;
}
k=n-k;
if(i==0)
{
maxn=k;
}
else if(maxn<k)
{
maxn=k;
}
}
printf("%d",maxn);
}