A、U131732 Woft6c看两任摸鱼王抢咸鱼
思路:逻辑思维题,首先可以自己进行模拟,找到规律。但是要注意开long long。
代码:
#include<stdio.h>
int main(){
int t;
scanf("%d",&t);
while(t--){
long long n;
scanf("%lld",&n);
long long ans=(n-1)/2;
printf("%lld\n",ans);
}
return 0;
}B、U130186 Peterliang学习杨氏矩阵
思路:考察对二维数组,if语句的使用,我们发现数据范围较小,所以使用暴力直接枚举,直接对每列和每行进行枚举,我们用flag来标记,初始化flag为1。如果最后flag为1,表示不符合,否则为符合。
#include<stdio.h>
int a[20][20];
int main(){
int n;
scanf("%d",&n);
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
scanf("%d",&a[i][j]);
}
}
bool flag=1; //一个标记变量
for(int i=0;i<n;i++){ //对每行进行枚举
for(int j=1;j<n;j++){
if(a[i][j]<=a[i][j-1]){
flag=0;
}
}
}
for(int j=0;j<n;j++){ //对每列进行枚举
for(int i=1;i<n;i++){
if(a[i][j]<=a[i-1][j]){
flag=0;
}
}
}
if(flag==1) printf("YES\n");
else printf("NO\n");
return 0;
}C、U131913 Peterliang救女神
思路:这题应该是唯一一道涉及算法题的题目了,由于数据较小,所以可以用dp或者dfs,bfs进行求解,新生还看不懂的可以跳过。由于只能往右或者往下走,所以,可以直接进行一个dp,而且我们发现每个位置上的数字比较小,所以可以把-1的位置的数字变为十分大,最后看一下答案的大小即可判断是否能打败怪兽。注意左上角和右下角都可能会有陷阱,这种情况直接输出Sorry。
#include<bits/stdc++.h>
#define ll long long
#define ull unsigned long long
#define pb push_back
#define lowbit(x) ((x)&(-x))
#define inf 0x3f3f3f3f
#define INF 0x3f3f3f3f3f3f3f3f
#define endl "\n"
#define MP(x,y) (make_pair(x,y))
#define pii pair<int,int>
#define pll pair<long long,long long>
using namespace std;
int n,a[15][15];
int dp[15][15];
int main(){
scanf("%d",&n);
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
scanf("%d",&a[i][j]);
memset(dp,0x3f,sizeof(dp));
if(a[0][0]!=-1) dp[0][0] = a[0][0];
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
if(i==0 && j==0) continue;
if(a[i][j]==-1) continue;
if(i>0) dp[i][j] = min(dp[i][j],dp[i-1][j]+a[i][j]);
if(j>0) dp[i][j] = min(dp[i][j],dp[i][j-1]+a[i][j]);
}
}
if(dp[n-1][n-1]==inf) puts("Sorry");
else printf("%d\n",dp[n-1][n-1]);
}
后面加了爆搜的写法
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int a[12][12];
int n;
int mi=0x3f;
void dfs(int x,int y,int sum){
if(a[x][y]==-1) return;
if(x>n||y>n) return;
if(x==n&&y==n){
mi=min(mi,sum);
return;
}
dfs(x+1,y,sum+a[x+1][y]);
dfs(x,y+1,sum+a[x][y+1]);
}
void solve(){
cin>>n;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
cin>>a[i][j];
}
}
if(a[1][1]==-1||a[n][n]==-1) cout<<"Sorry"<<endl;
else{
dfs(1,1,a[1][1]);
if(mi>=0x3f) cout<<"Sorry"<<endl;
else cout<<mi<<endl;
}
}
int main(){
solve();
return 0;
}D、U131840 Aaryn和Woft6c的字符串出现次数
思路:这个由于数据范围很小,所以可以直接进行一个处理,用一个数组num来记录26个小写字符的个数,然后找出最大的那个,最后按顺序遍历一下26个字符的个数,如果是等于最大就输出。所以不会排序也没有关系。不过可能同学们对于字符串的输入输出还不了解,所以看着办吧。所以多学多接触!!!
#include<bits/stdc++.h>
using namespace std;
int data[50];
int main()
{
int n,maxn;
scanf("%d",&n);
while(n--)
{
memset(data,0,sizeof(data));
string x;
cin>>x;
maxn=0;
int num=x.length();
for(int i=0;i<num;i++)
{
data[x[i]-'a']++;
maxn=max(maxn,data[x[i]-'a']);
}
for(int i=0;i<26;i++)
{
if(data[i]==maxn) printf("%c",i+'a');
}
printf("\n");
}
return 0;
}
E、U131705 Peterliang的时间复杂度
思路:这个思路其实很简单,由于是在同一天,我们可以以00:00:00为起始点,然后计算两个时间距离这个时刻的时间,最后去两者之间的差值即可。
代码:
#include<stdio.h>
int main(){
int t;
scanf("%d",&t);
while(t--){
int h1,h2,m1,m2,t1,t2;
scanf("%d%d%d",&h1,&m1,&t1);
scanf("%d%d%d",&h2,&m2,&t2);
int sum1=h1*3600+m1*60+t1;
int sum2=h2*3600+m2*60+t2;
int ans=sum1-sum2;
if(sum1>sum2) printf("%d\n",ans);
else printf("%d\n",-ans);
}
return 0;
}F、U131906 相信我!这题很难!!!
签到题
#include<stdio.h>
int main(){
printf("I love NCU\n");
printf("I love ACM\n");
return 0;
}
京公网安备 11010502036488号