《难题》
这个题跟题目没有任何关系 而且恰恰相反
直接输出n个1就行
c
#include<stdio.h>
int main()
{
int n;
scanf("%d",&n);
while(n--)
{
int x;
scanf("%d",&x);
for(int i=1;i<=x;i++) printf("1 ");
printf("\n");
}
}
串串香之cyl带你吃
这个题可以从样例中得到结论 即为 k*s+
那么就可以愉快的写代码了
c
#include<stdio.h>
int a[1000001];
int main()
{
int n,k,s;
scanf("%d%d%d",&n,&k,&s);
int ans=k*s;
for(int i=1;i<=n;i++) scanf("%d",&a[i]);
for(int i=1;i<=n;i++)
{
int x;
scanf("%d",&x);
ans=ans+x*a[i];
}
printf("%d",ans);
}
孤注一掷之代码一掷
此题就是将1进制改为二进制
zzulioj,haueoj和haue软件学院oj里面都有类似的题目
话不多说上代码
#include<stdio.h>
int a[100];
int main()
{
long long n;
scanf("%lld",&n);
int s=0;
for(int i=0;i<=63;i++)
{
if(n>>i&1) a[i]=1,s=i;
}
for(int j=s;j>=0;j--) printf("%d",a[j]);
}
这个代码用了位运算 如果还没了解到的可以看代码二
#include<stdio.h>
void convert(int n,char str[]);
int main(){
char str[666];
int n;
scanf("%d",&n);
if(n==1||n==0)
printf("%d\n",n);
else
convert(n,str);
return 0;
}
void convert(int n,char str[])
{
int i=0;
while(n>0)
{
str[i++]=n%2+'0';
n/=2;
}
while(i--)
printf("%c",str[i]);
}
快乐早八
这个题目直接按照题目要求即可 当在7点多的时候一定不会迟到
9点多的时候一定会旷课
那么我们只用考虑8点多的时候:
1.8:00的时候一定不会迟到
2.8:01到8:05的时候一定是迟到
3.8点的其他时间一定是旷课的
那么我们就可以按照题目意思进行写代码
#include<stdio.h>
int main()
{
int n;
scanf("%d",&n);
int a1=0,a2=0;
for(int i=1;i<=n;i++)
{
int x,y;
scanf("%d:%d",&x,&y);
if(x==9)
{
a2++;
}
else if(x==8)
{
if(y<=5&&y>0) a1++;
else if(y>5&&y<=59) a2++;
}
}
printf("%d %d",a1,a2);
}
大学课程总分
这个题目是小模拟 我们只需要按照要求进行计算即可
输入n行a,x,b,y,然后把每行的ab+xy加起来就行
建议用double进行读入
下面看代码
#include<stdio.h>
int main()
{
double a,b,x,y,sum=0;
int n;
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%lf%lf%lf%lf",&a,&x,&b,&y);
sum=sum+a*b+x*y;
}
sum=sum;
printf("%.1lf",sum);
}
无限取模
题目非常的干净
那么我们可以试试找规律
因为这个数就一个 而且数据很大,这个很容易找规律
数据 答案
2 0
3 1
4 1
5 2
6 2
7 3
8 3
我们可以发现答案就是(n-1)/2
那么我们可以很快的写代码了
#include<stdio.h>
int main()
{
int n;
scanf("%d",&n);
printf("%d",(n-1)/2);
}
HAUE上学之旅
这个题目我们可以发现 5以内都是1步,当大于5的时候,一直走五步是最快的,如果有余数直接次数+1即可。
即上取整(n+4)/5
#include<stdio.h>
int main()
{
int n;
scanf("%d",&n);
printf("%d",(n+4)/5);
}
暑假练车之科目二
这个题目就是模拟题目,算是一个小模拟,按照题目要求即可。
这个题目对于大家来说 就是怎么储存字符串,以及怎么查找字符串,这是个问题。我们可以先读入 m个字符串使用字符串数组a[1000][1000]进行储存。
先写一个函数,这个函数的作用看字符串x在数组a里面对应的下标位置。
函数写完了 那么读入n个字符串之后,每读入一个字符串,使用函数找到对应的下标,然后定义一个int类型数组b,b[x对应的下标]++。
最后判断在这b[1]~b[m]里面有多少大于等于k记录下来即可。
代码如下
#include<stdio.h>
#include<string.h>
char a[100][100];
char q[100];
int c[100];
int n,m,k;
void add(char x[])
{
for(int i=1;i<=m;i++)
{
if(strcmp(x,a[i])==0)
{
c[i]++;
}
}
}
int main()
{
scanf("%d%d%d",&m,&n,&k);
for(int i=1;i<=m;i++)
{
scanf("%s",a[i]);
}
for(int i=1;i<=n;i++)
{
scanf("%s",q);
add(q);
}
int ok=0;
for(int i=1;i<=m;i++)
{
if(c[i]>=k) ok++;
}
if(ok==m) printf("yibaguo");
else if(ok==0) printf("-1");
else printf("%d",ok);
}
《真》《签到》
这个题目是真的真的真的与题目难度相反。
这个题意思就是找到每个点的8个正方向有多少个点。
那么我们可以使用暴力的写法:
两重for循环一下,每次对应两个点进行判断,但是不能保证两个点一样
代码如下
#include<stdio.h>
#include<math.h>
int a[5050],b[5050];
int main()
{
int n;
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
int x,y;
scanf("%d%d",&x,&y);
a[i]=x,b[i]=y;
}
int ans=0;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
if(j==i) continue;
if(a[i]==a[j]||b[i]==b[j]||abs(a[i]-a[j])==abs(b[i]-b[j])) ans++;
//a[i]==a[j] 表示在同一竖行
//b[i]==b[j] 表示在同一横行
// abs(a[i]-a[j])==abs(b[i]-b[j]) 表示 i和j斜率一样
}
}
printf("%d",ans);
}
第二种是思维想法 我们可以储存横行里面每个点的坐标,(x+y)和(x-y)的点的多少,于是可以发现每一个排列组合,即x*(x-1)/2
那么代码如下
#include<stdio.h>
int a[5050],b[5050],c[5050],d[5050];
int main()
{
int n;
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
int x,y;
scanf("%d%d",&x,&y);
a[x]++;
b[y]++;
c[2000+x-y]++;
d[2000+x+y]++;
}
int ans=0;
for(int i=0;i<=5050;i++)
{
if(a[i]>1) ans+=a[i]*(a[i]-1);
if(b[i]>1) ans+=b[i]*(b[i]-1);
if(c[i]>1) ans+=c[i]*(c[i]-1);
if(d[i]>1) ans+=d[i]*(d[i]-1);
}
printf("%d",ans);
}