难受不是一时的,而是一直持续的。现在写题目的检查越来越难了。并且对思维的要求很高,还,难受。
就拿我自以为很使用的一道题来讲吧。
给定一个长度为 n� 的非负整数环形数组 a1,a2,…,an�1,�2,…,��。
由于环形数组首尾相连,因此 an�� 的下一位元素是 a1�1。
有一个指针,指向该数组中的元素。
初始时,该指针指向 a1�1。
接下来执行以下循环操作(由伪代码表示):
while(指针指向的元素不等于 0)
{
令当前数组中所有大于 0 的元素减 1,并令指针指向下一位元素;
}
请你输出循环操作结束后,该指针指向的元素的下标。
输入格式
第一行包含整数 n�。
第二行包含 n� 个整数 a1,a2,…,an�1,�2,…,��。
输出格式
一个整数,表示指针最终指向的元素的下标。
数据范围
前 66 个测试点满足 2≤n≤102≤�≤10。
所有测试点满足 2≤n≤1052≤�≤105,0≤ai≤1090≤��≤109。
该说不说,这个题目真的EX我只能说。如果直接硬套的话,门都没有。但是,巧妙地运用数组的话,还差点意思。这个题目的关键就在他的样本数据!样本数据很少,这我就联想到了最小值。(tnnd,awcing终于不是只会写一道题了)用最小值来做指针的开刀,这就会快得多。
#include <stdio.h>
#include <stdlib.h>
int main()
{
int n,min=0;
scanf("%d",&n);
int arr[n+1];
for(int i=1;i<=n;i++)
{
scanf("%d",&arr[i]);
if(i==1)
{
min=arr[1];//找最小值,关键
}
else
{
if(min>arr[i])
{
min=arr[i];
}
}
}
int q=min%n+1,l=min;//算减去最小值q指向谁,因为样本最多只有10嘛
while(arr[q]-l>0)
{
if(q!=n)
{
q++;
}
else
{
q=1;
}
l++;
}
printf("%d",q);
}
题意翻译
人们常用的电子表格软件(比如: Excel)采用如下所述的坐标系统:
第一列被标为 A,第二列为 B,以此类推,第 2626 列为 Z。接下来为由两个字母构成的列号: 第 2727 列为 AA,第 2828 列为 AB ⋯⋯ 在标为 ZZ 的列之后则由三个字母构成列号,如此类推。
行号为从 11 开始的整数。
单元格的坐标由列号和行号连接而成。比如,BC23 表示位于第 5555 列 2323 行的单元格。
有时也会采用被称为 RXCY 的坐标系统,其中 �X 与 �Y 为整数,坐标 (�(X,�)Y) 直接描述了对应单元格的位置。比如,R23C55 即为前面所述的单元格。
您的任务是编写一个程序,将所给的单元格坐标转换为另一种坐标系统下面的形式。
输入
第一行一个整数 �n (1(1 ≤≤ �n ≤≤ 105)105) 表示将会输入的坐标的数量。
接下来 �n 行,每行一个坐标。
注意: 每个坐标都是正确的。此外不会出现行号或列号大于 106106 的单元格。
输出 �n 行,每行一个被转换的坐标。
输出
�n 行,每行一个被转换的坐标。
还有没有人九九我,这道题哪里出问题了,真的崩溃了。
#include <stdio.h>
#include <stdlib.h>
int main()
{
int n;
char crr[]="ABCDEFGHIJKLMNOPQRSTUVWXYZ";//标号数组
scanf("%d",&n);
while(n--)
{
int i,a=1,b,sum=0,sum2=0,brr[300],m=0,flag=0;
char arr[300];
scanf("%s",arr);//输入
if(arr[0]=='R'&&arr[1]>='0'&&arr[1]<='9')//判断是哪一种
{
int i=2;
while(arr[i]!='\0')
{
if(arr[i]='c')
{
flag=1;
}
i++;
}
}
i=0;
if(flag==0)
{
while(arr[i]>='A'&&arr[i]<='Z')//换算
{
i++;
}
b=i-1;
while(arr[b]!='\0')
{
b++;
}
while(b>=i-1)
{
sum2=sum2+a*(arr[b]-'0');
a=a*10;
b--;
}
a=1;
while(i>=0)
{
sum=sum+(arr[i-1]-'A'+1)*26*a;//换算
a=a*10;
i--;
}
a=1;
printf("R%dC%d",sum,sum2);
}
else
{
i=i+1;
while(arr[i]!='C')
{
i++;
}
int d=i;
while(i>=1)
{
sum=sum+(arr[i]-'0')*a;
a=a*10;
i--;
}
a=1;
int f=0;
for (;sum; sum = sum / 26 - !(sum % 26))//换算26进制
{
if (sum % 26)
brr[f++] = sum % 26;
else
brr[f++] = 26;
}
while(f)
{
printf("%c",crr[brr[f--]]);输出
}
while(arr[d+1]!='\0')
{
printf("%c",arr[d+1]);输出
}
}
}
return 0;
}
救救孩子。手都冻僵了。。。